模板方法模式
实现要素:
准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法交由子类实现剩余的逻辑,用钩子方法去给与子类更大灵活性,最后将方法汇总成一个不可改变的模板方法。
适配器模式
适配器模式将一个类的接口转换为客户期望的另外一个接口,使的原本由于接口不兼容而不能在一起工作的那些类可以在一起工作。
适配器模式分类:
使用组合的方式成为对象适配器;把被适配者作为一个对象组合到适配器类中,以修改目标接口包装被适配者。
使用继承的方式成为类适配器;通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配。
策略模式:
策略模式是将可变部分从代码中抽象分离成算法接口,在该接口下分别封装一系列的算法实现,并是他们可以相互替换,从而导致客户端程序独立于算法的改变。
策略模式的优点:
1、使用了组合使的架构更加灵活
2、富有弹性,可以较好的应对改变
3、更好的代码复用性(相对于继承)
4、消除了大量的条件语句
策略模式缺点
1、客户代码需要了解每个策略实现的细节
2、增加了对象的数目
代理模式:
四种常见的代理模式:远程代理,虚拟代理,保护代理,智能引用代理。
可以使用继承和聚合实现静态代理,不推荐用继承的方式,使用聚合的方式时代理对象之间可以互相传递。
JDK的动态代理的实现步骤:
1、创建一个实现接口InvocationHandler接口的类,它必须实现invoke方法。
2、创建被代理的类以及接口
3、调用Proxy的静态方法,创建一个代理类
4、通过代理调用方法
JDK动态代理与CGlib动态代理的区别:
1、JDK动态代理的机制时只能代理实现了接口的类,没有实现接口的类不能实现动态代理
2、cglib时针对类来产生代理,对指定的目标类产生一个子类,通过方法拦截技术拦截所有父类方法的调用。由于该代理机制使用继承的方式,所以不能对final修饰的类进行代理。
责任链模式:
将接收者对象连成一条链,并在该链上传递请求,直到有一个接收者对象处理它,通过让更多的对象有机会处理请求,避免了请求发送者和接收者之间的耦合。
责任链模式是一个好的设计模式吗?
开闭原则:是OO的一个基本原则,对扩展开放,对变更关闭,有业务变更我们通过新增一个类而非修改原有代码来满足我们的业务需求。
执行性能:对于一个cpu密集型的应用来说,责任链模式比较耗费内存。