23种设计模式总览
一、单例模式
二、模板方法模式
大部分流程相同,某些个别操作在不同实现类之间不一样(定义一个操作中的算法的骨架,而将一些步骤延迟到子类中)。抽象方法+方法具体实现+定义钩子方法。
// IMyFrame接口里面定义一个paint()抽象方法,不同的实现类做不同的实现。
public static void drawFrame(IMyFrame f){
doSth1();
f.paint();
doSth2();
}
三、代理模式(proxy)
1.静态代理:接口+2实现类,其中一个实现类是真实角色,另外一个实现类是代理角色(中介.代理类中含有真实对象的引用,实现抽象方法时调用真实角色的方法+其他操作)。 缺点:写代理时,真实角色必须先存在才行,不灵活。(eg:Runnable接口)
2.动态代理:程序运行时才为被代理对象生成代理对象,也叫JDK动态代理,借助反射。JDK中生成代理对象的代理类就是Proxy,所在包是java.lang.reflect。代理对象不用实现接口,但是目标对象一定要实现接口。
3.cglib代理:继承目标类,以目标对象子类的方式实现代理。
5..双亲委派机制:先给最上面的CL加载,如果不行再依此向下,自己也加载不了则报错。委托是从下向上,具体查找过程是自上至下。
四、工厂模式
简单工厂模式:不灵活
工厂方法模式:使用继承。利用多态,将实现交给子类去做;扩展性较好(加入新角色时实现接口即可)
抽象工厂模式:使用组合。一对多,一个工厂生产多种对象;扩展性较好(加入新角色是在原接口新增方法);