文章列表
接口与抽象类
- 博客分类:
- design pattern
接口就是抽象,定义了组装的规则
就像个220v三头电源一样,不管连接的是电视、电脑、微波炉,只要插头符合组装的规则,就能通电。
有一种接口,没有定义任何的方法,只是为了标识一组对象的类型;
like:
public interface Serializable{}
抽象类应该具有最多的公用代码,最少的数据。
继承原则:has-a or is-a?
1、开闭
对扩展开放,对修改关闭;
面对抽象编程,用继承来扩展,去实现变化。
2、里氏替换
儿子随时随地可以顶替父亲。
3、依赖倒转
有事找中介,谁也别依赖谁,都依赖抽象。
4、尽量用合成或聚合,少继承。
5、迪米特
少交朋友。
对象关系
- 博客分类:
- design pattern
继承(空三角)
聚合:属性,不负责初始化,拥有其引用(空心菱形)
合成:属性,负责生产和销毁,拥有其值(实心菱形)
依赖:方法中的形参(虚线箭头)
定义了一系列的应用在集合上的静态算法。
1、checked系列: 返回类型安全试图;
2、synchronized系列:
为被包装集合提供同步,但是由于集合的迭代器是即时失效的,所以在进行迭代的时候还需要手工同步。
3、unmodifiable和empty系列:
返回不可改变的集合或空集合,当将数据传递给第三方时,并且不希望数据被污染的时候尤其有用。
主要接口:
1、Collection,层次中的根接口;
2、List,一组序列,索引从零开始,允许重复;
3、Queue,单向队列;
4、Deque,双向队列;
5、Set,不允许有相同元素的组;
6、SortedSet,排序的Set,默认为升序。
7、Map,键值对;
8、Map.Entry,一个键值对,此为Map中的内部类,
使用集合的时候,
首先考虑那一种结构的接口使用,
再考虑是否需要线程安全,
然后根据性能、数据访问方式等其他因素选择相应的实现类,或者自己实现一个。
Runtime:
运行时环境,其中exec方法用于执行其他程序
Runtime r = Runtime.getRuntime();
Process p =null;
try{
p=r.exec("notepad");
p.waitFor();
}catch(Exception e){
System.out.println(e.getMessage());
}
Process:进程类,由Runtime.exec()或ProcessBuilder.start()创建;
ProcessBuilder:
管理创建的 ...
String:
不可变对象,提供强大的分析功能(查找、匹配、替换、提取、大小写、编码、split等等)
String+Object是通过String.valueOf(Object)将对象转换为String后进行连接的;
StringBuffer与StringBuilder
可变长度,可写的字符序列;
StringBuffer为线程安全的;
总结:
jvm在执行String+Object会在后台自动转换为StringBuffer进行连接,如果不是频繁的在字符序中间插入或删除的话,String完全可以应付。
如果频繁的链接字符串,或在字符串中间插入删 ...