设计模式

26 阅读1分钟

1 单例模式

public class Singleton {
	
	// volatile可以禁止指令重排序,如果没有volatile,线程可能拿到未实例完成的对象
	private static volatile Singleton singleton = null;
		
	// 构造函数私有,防止在外部new实例对象
	private Singleton() {
		
	}
		
	public static Singleton getInstance() {
		if(singleton == null) {
			// 为什么要判断两次?线程1和线程2都走到这里,线程2拿到锁,创建了实例
			synchronized (Singleton.class) {
				// 如果这里不进行判空,线程2已经创建了实例,线程1进来,又会创建一个实例
				if(singleton == null) {
					singleton = new Singleton(); 
				} 
			}
		}
		return singleton;
	}
}

2 装饰者设计模式

blog.csdn.net/lyabc123456…

装饰器模式和代理模式的区别 装饰器模式强调的是增强自身,能在被增强的类上使用增强后的功能。 代理模式是给一个对象提供一个代理对象,代理对象控制持有原对象的引用,实现与业务没有太多关系的职责如记录日志、设置缓存等。 zhuanlan.zhihu.com/p/97499017