设计模式学习风向
单例模式
- 保证只有一个对象减少开销
- 保证只有一个对象,比如说id生成器这种,有多个对象会出错
public class SingleTonTest {
// 懒汉模式加载
private static SingleTonTest instance;
public static SingleTonTest getInstance() {
if (instance == null) {
instance = new SingleTonTest();
}
return instance;
}
public static void main(String[] args) throws IllegalAccessException, InstantiationException {
SingleTonTest singleTonTest = SingleTonTest.getInstance();
SingleTonTest singleTonTest1 = SingleTonTest.class.newInstance();
System.out.println(singleTonTest.hashCode());
System.out.println(singleTonTest1.hashCode());
}
}
优点:单例模式可以保证内存里只有一个实例,减少了内存的开销。
缺点:单例模式一般没有接口,扩展困难。如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则。
开闭原则:对于扩展时支持的,对于修改(尤其是修改源代码)是封闭的。
工厂模式
工厂模式:生成对象的细节被封装了起来。我们只需要根据名字去工厂拿对应的实例就可以了。
缺点是:要管理工厂比较麻烦。所以对一工厂我们也可以采用个工厂模式封装一下。
代理模式和装饰者模式
装饰者模式是给原来的类扩展新功能。但是对象还是原来的对象。而代理模式是生成一个新的对象,这个对象增加了很多原来对象业务无关的功能,比如日志的记录等等。
观察者模式
观察对象的变化做出反应。比如rocketMq同步的Binlog消息