参考:http://blog.csdn.net/zhangerqing/article/details/8239539
结构型
适配器 : 类适配器、对象适配器、接口适配器
类适配器
src类已实现方法1(m1),接口类中定义两个方法m1和m2
通过适配器类,继承src类,包含接口类,并实现接口类中方法m2
目的:利用适配器类,达到重复利用已实现方法的类,并且实现接口类中未实现的接口
public adapter extends src implements intefa{
@Override
public void m2(){
// 实现
};
}
对象适配器
适配器类包含src,并重写m1,但实现时调用src的m1方法
点击(此处)折叠或打开
- public class Wrapper implements Targetable {
- private Source source;
- @Override
- public void method2() {
- System.out.println(\
接口适配器
适配器类(抽象类:已实现接口中所有方法,但方法体都为空)
通过继承适配器类,不与(implements )接**互,只重写自己想要的方法,其他方法使用适配器默认的实现方式
总结:
类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,继承抽象类即可。
装饰模式:装饰模式(Decorator)
通过组合"已有类"初始化属性,方法通过调用"已有类"的方法,达到功能的动态实现
应用场景:
1、需要扩展一个类的功能。
2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
缺点:产生过多相似的对象,不易排错!
代理模式(Proxy)--------动态代理类(通过反射reflect方式实现)
参考:http://www.blogjava.net/baoyaer/articles/84080.html
应用场景:
如果已有的方法在使用的时候需要对原有的方法进行改进(原有已实现内容不动,只是扩充新内容)
此时有两种办法:
1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
2、就是采用一个代理类,包含原方法的实例,调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
3、继承,重写接口。但会继承很多冗余接口。
使用代理模式,可以将功能划分的更加清晰,有助于后期维护!
外观模式(Facade)
外观类组合其他类的实例,外观类的方法中实现调用其他类行为,外部只调用外观类的接口
组合模式(Composite)---
使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等
与外观的区别,是将多个同类对象组合
桥接模式(Bridge)-----和哪个模式很像?区别?特点?
驱动管理使用此模式
接口类(driver):定义驱动应有的方法
每种驱动类(implements driver):实现接口类定义的所有方法
驱动管理器类(包含 driver的实例):包含1个接口类的实例,所有通过set方式更新该实例的具体对象(每种驱动)
自定义接口类中所有方法,实现过程调用接口类实例对应的方法
?为什么不直接implents 接口类,防止漏写某些方法
外部只调用驱动管理器中的方法
享元模式(Flyweight)
连接池:防止对象的过多,统一管理