设计模式
最近在看设计模式之禅,总结一下23种模式
单例模式
案例引入
我是皇帝,天底下只能由我一个,唯我独尊
具体代码
懒汉式
public class Single {
private Single() {
}
private static Single single = null;
public static Single getInstance() {
if (single == null) {
single = new Single();
}
return single;
}
}
饿汉式
public class Single {
private Single() {
}
private static final Single single = new Single();
public static Single getInstance() {
return single;
}
}
优点
- 内存中只有一个实例,减少了内存开销
- 避免了对资源的多重占用
- 设置全局的访问点
缺点
- 一般没有接口,难以扩展
- 对于测试不利
- 与单一职责原则有冲突
使用场景
- 生成唯一序列号的环境
- 整个项目需要一个共享访问点或共享数据
- 创建一个对象需要消耗的资源过多
- 需要定义大量的静态常量和静态方法
注意事项
- 高并发情况注意线程同步问题
工厂模式
案例引入
女娲用八卦炉造人
具体代码
public class personFactory {
public <T extends Person> T createPerson(Class<T> c) {
Person person=null;
try {
person=(Person)Class.forName(c.getName()).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T)person;
}
}
public interface Person {
void complexion();
void talk();
}
public class black implements Person {
@Override
public void complexion() {
System.out.println("黑种人");
}
@Override
public void talk() {
System.out.println("我是黑人");
}
}
public class white implements Person {
@Override
public void complexion() {
System.out.println("白种人");
}
@Override
public void talk() {
System.out.println("我是外国人");
}
}