适配器模式

来源:互联网 发布:js保温模板 编辑:程序博客网 时间:2024/05/29 15:45
适配器模式(Adapter Pattern),把一个类的接口变换成客户端所期待的另一种接口, Adapter模式使原本因接口不匹配(或者不兼容)而无法在一起工作的两个类能够在一起工作。又称为转换器模式、变压器模式、包装(Wrapper)器模式(把已有的一些类包装起来,使之能有满足需要的接口)。
最典型的例子:很多功能手机,每一种机型都自带有从电器,有一天自带充电器坏了,而且市场没有这类型充电器可买了。怎么办?万能充电器就可以解决。这个万能充电器就是适配器。
适配器模式分类:1、类适配器模式
                2、对象适配器模式
                3、接口适配器模式
类适配器模式:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public interface Targetable {  
  2.  public void method1();  
  3.  public void method2();  
  4. }  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class Adapter  extends Source implements Targetable{  
  2.   
  3.     @Override  
  4.     public void method2() {  
  5.        System.out.println("this is the targetable method!");          
  6.     }  
  7.   
  8. }  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class AdapterTest {  
  2.   public static void main(String[] args) {  
  3.    Targetable target = new Adapter();   
  4.    target.method1();  
  5.    target.method2();  
  6.  }  
  7. }  

public class Source { public void method1(){ System.out.println(" This is Source method!"); }}


输出:

  This is Source method!   this is the targetable method!
这样Tartable接口的实现类就具有Source类的功能了
2、对象适配器
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public interface Targetable {  
  2.  public void method1();  
  3.  public void method2();  
  4. }  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class Wrapper implements Targetable {  
  2.     private Source source;  
  3.     public Wrapper(Source source){  
  4.          super();  
  5.          this.source = source;  
  6.     }  
  7.     @Override  
  8.     public void method1() {  
  9.         source.method1();  
  10.           
  11.     }  
  12.   
  13.     @Override  
  14.     public void method2() {  
  15.         System.out.println("this is the targetable method!");    
  16.     }  
  17.   
  18. }  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class AdapterTest {  
  2.   public static void main(String[] args) {  
  3.    Source source = new Source();  
  4.    Targetable target = new Wrapper(source);   
  5.    target.method1();  
  6.    target.method2();  
  7.  }  
  8. }  

public class Source { public void method1(){ System.out.println(" This is Orginal method!"); }}


3、接口适配器模式

public interface Sourceable { public void method1(); public void method2();}}


[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public abstract class Wrapper2 implements Sourceable {  
  2.   public void method1(){};  
  3.   public void method2(){};  
  4. }  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class SourceSub1 extends Wrapper2{  
  2.   public void method2(){  
  3.       System.out.println("this is SourceSub1 method2");  
  4.   }  
  5. }  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class SourceSub2 extends Wrapper2 {  
  2.  public void method2(){  
  3.      System.out.println("This is SourceSub2 method2");  
  4.  }  
  5. }  
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class AdapterTest {  
  2.   public static void main(String[] args) {  
  3.    Sourceable source1 = new SourceSub1();  
  4.    Sourceable source2= new SourceSub2();  
  5.    source1.method1();  
  6.    source1.method2();  
  7.    source2.method1();  
  8.    source2.method2();  
  9.  }  
  10. }  

结果:
 this is SourceSub1 method2This is SourceSub2 method2
总结:
类的适配器模式:当希望将一个类转换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可。
对象的适配器模式:当希望将一个对象转换成满足另一个新接口的对象时,可以创建一个Wrapper类,持有原类的一个实例,在Wrapper类的方法中,调用实例的方法就行。
接口的适配器模式:当不希望实现一个接口中所有的方法时,可以创建一个抽象类Wrapper,实现所有方法,我们写别的类的时候,继承抽象类即可
0 0
原创粉丝点击