现在的位置: 首页 > 综合 > 正文

设计模式——适配器模式

2018年05月26日 ⁄ 综合 ⁄ 共 1592字 ⁄ 字号 评论关闭

适配器模式的核心思想:把原有的接口转变成调用者所期望的接口,从而使不同接口的类可以一起工作。

  适配器中包含如下3个角色。

  ●源角色Adaptee:需要适配的目标或接口。

  ●目标角色Target:所期望得到的接口。

  ●适配器角色Adapter:适配器类是本模式的核心,用来把源接口转换成目标接口,显然这3者角色之间的交互关系便组成了适配器模式的原型。

  适配器也叫做包装器模式(Wrapper),根据适配对象的不同,又可以将适配器模式分为3种子类型。

  ●类的适配器模式:用于对类进行适配。

  ●对象的适配器模式:用于对对象进行包装。

  ●接口的适配器模式:用于对接口抽象化。

第一种:类的适配器模式,见代码理解

    //源类Adaptee  
    public class Source{  
      public void operation1(){  
        System.out.println("原始类的方法");  
      }  
    }  
      
    //目标接口Target  
    public interface Targetable{  
      //与源类相同的接口函数  
      public void operation1();  
      //新的接口函数,源类中没有  
      public void operation2();  
    }  
      
    //适配器模式,继承源类,并实现目标接口  
    public class Adapter extends Source implements Targetable{  
      //实现目标类的新接口函数  
      public void operation2(){  
        System.out.println("适配目标类后的方法");  
      }  
    }  

第二种:对象的适配器模式,见如下代码理解

    //包装器模式  
      public class Wrapper implements Targetable{  
        //源类对象  
        private Source source;  
        //取得源类对象  
        public Wrapper(Source source){  
          super();  
          this.source = source;  
        }  
          
        //调用源类对象的方法  
        public void operation1(){  
          source.operation1();  
        }  
       
        //实现目标类的新接口函数  
        public void operation2(){  
          System.out.println("包装目标类后的方法");  
        }  
      }  

第三种:接口的适配器模式,见代码理解

  ●Sourceable是定义了多个接口函数的接口类。

  ●DefaultWrapper是一个抽象类,它实现了接口Sourceable,并且为每一个接口函数提供了默认的实现。

依据DefaultWrapper就可以编写不同的实现,在实现中只需要重写部分待实现的函数,而不是要重写全部。

见如下代码理解:
 

    //源接口  
      public interface Sourceable{   
        public void operation1();  
        public void operation2();  
      }  
      
      //默认适配器类DefaultWrapper  
      public abstract class DefaultWrapper implements Sourceable{  
        public void operation1(){}  
        public void operation2(){}  
      }  
      
      //两个实现类,可以选择自己需要的实现  
      public class SourceSub1 extends DefaultWrapper{  

        public void operation1(){  
          System.out.println("源接口的一个实现子类Sub1");  
        }  
      }  
      
    public class SourceSub2 extends DefaultWrapper{  
      
        public void operation2(){  
          System.out.println("源接口的一个实现子类Sub2");  
        }  
      }  

java中的应用->

  →对象的适配器模式:Iterator适配器

  →对象的适配器模式:Enumeration适配器

  →接口的适配器模式:AWT事件适配器

抱歉!评论已关闭.