设计模式
创建型
单例模式
确保一个类只有一个实例,并提供该实例的全局访问点。
实现方式有饿汉式(类初始化时加载)、懒汉式(懒加载节省资源,但用synchronized性能不佳)、双检锁、枚举(利用Java枚举类只会初始化一次,相当于一种饿汉式)、静态内部类(懒加载,内部的类只有在需要时才被加载,JVM保证只实例化一次)
双重校验锁的实现:
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getUniqueInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
简单工厂
产生耦合关系的是简单工厂类和具体产品类,实现了客户与产品之间的耦合,用于创建一个对象
工厂方法
产生耦合关系的是工厂类的实现类和产品的实现类,此方法将实例化延迟到子类决定,用于创建一个对象
抽象工厂
创建的是一个对象家族(很多具有相关性的对象),产品的实现类和工厂的实现类之间具有交叉耦合的关系
行为型
责任链
实现发送者和接收者之间的耦合关系,将这些对象组合成一条链,请求沿着链发送处理。
handler记录了后继handler是哪一个,并声明了消息处理的抽象方法。Netty的channelPipeline就是用了这一设计思想。
观察者
主题类具有注册、移除、通知所有观察者的功能,通过维护观察者列表实现
策略
定义一系列算法,并使得算法独立于使用它的客户端(解耦)
模板方法
定义算法框架,将一些步骤的实现延迟到子类,将相同的步骤抽取成父类的方法,不同的算法(步骤)放到子类去实现
结构型
装饰
为对象动态添加功能,具体的组件可以套在被装饰者上,从而动态扩展被装饰者的功能。很符合开闭设计原则。
jdk中的设计模式
cloud.tencent.com/developer/a…