设计模式
设计原则
- 封装变化:将可能发生变化的部分独立出来
- 多用组合,少用继承
- 针对接口编程,而不针对实现编程
- 松耦合设计
- 开放-关闭原则:对扩展开发,对修改关闭
设计模式
策略模式
定义一组可以互相替代的算法组,利用多态将具体实现隐藏
观察者模式
定义
观察者模式定义了对象之间的一对多依赖,当对象状态改变时,它的所有依赖者都会收到通知并自动更新。
实现方式
观察者模式在Java里有两种实现方式:Java内置观察者模式、自定义观察者模式
Java内置的观察者模式用到了Observer接口和Observable类,由于Observable是类,限制了复用。
自定义观察者模式:
Observable接口应该具备的方法:addObserver, removeObserver, notifyObservers;属性:List
Observer接口应该具备的方法:update
装饰者模式
定义
动态的将行为附加到对象上,对对象功能进行扩展
设计思路
装饰者需要与被装饰者有相同的类型,并且被装饰者以组合的方式嵌入到装饰者中,然后在实现的方法中调用被装饰者的方法,达到扩展功能的目的。
相同的类型?
结构型模式
适配器模式
定义
将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)
适配器模式可以将一个类的接口和另一个类的接口匹配起来,而无须修改原来的适配者接口和抽象目标类接口
类适配器和对象适配器
类适配器通过继承实现
对象适配器通过通过关联(组合)实现
结构图
类适配器:
对象适配器:
target:客户端所需的接口抽象
adapter:上述接口抽象的实现类,转换器
adaptee:被适配的角色,已存在的接口或实现
class Adapter extends Target {
private Adaptee adaptee; //维持一个对适配者对象的引用
public Adapter(Adaptee adaptee) {
this.adaptee=adaptee;
}
public void request() {
adaptee.specificRequest(); //转发调用
}
}
开源框架
spring TaskExecutor
再如,如何用两个栈实现队列?adapter:队列,adaptee:栈