java 设计模式

UML图:http://gaojiewyh.iteye.com/blog/407013

参考: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方法
        

点击(此处)折叠或打开

  1. public class Wrapper implements Targetable {
  2.     private Source source;
  3.     
  4.     @Override
  5.     public void method2() {
  6.         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)
            连接池:防止对象的过多,统一管理
请使用浏览器的分享功能分享到微信等