http://www.moon4chen.com/

设计模式--适配器模式,学习笔记

一般适配器模式类图如下:

适配器模式类图

图中Adapter与Adaptee的继承关系也可以换成关联关系(实心箭头)

1.解决的问题

  将一个系统的接口转换成为另外一种形式,从而使原来不能直接调用的接口变得可以调用。

2.原理

  主要由3部分组成:目标类、源类、和适配器类。

3.基本代码

  

 1     /**
 2      * 目标类
 3      * */
 4     public interface Target {
 5         void request();
 6     }
 7     /**
 8      * 
 9      * 源类
10      *
11      */
12     public class Adaptee {
13         public void request(){
14             System.out.println("method run!");
15         }
16     }
17     /**
18      * 
19      * 适配器类
20      *
21      */
22     class Adapter implements Target {
23 
24         private Adaptee adaptee;
25         
26         public Adapter (Adaptee adaptee) {
27             this.adaptee = adaptee;
28         }
29         @Override
30         public void request() {
31             //经过接口维护,将adaptee重用
32             this.adaptee.request();
33             System.out.println("method change!");
34         }
35     }
1     public static void main(String[] args) {
2         AdapterGof adaptergof = new AdapterGof();
3         Adaptee adaptee = adaptergof.new Adaptee();
4         Target adapter =adaptergof.new Adapter(adaptee);
5     }


4.例子-得出疑问

  已知一个实现类xxCircle实现了一个display()的方法。对这个类进行转换,可以让其他Shape类实现display()方法;

    

 

 所以我们需要一个适配器Adapter,可以得出类图如下:

这道题是上设计模式课时老师课堂的一道练习题。正确答案或是如上图。思考看来,发现一个问题:

 

Adatper如何知道Target子类的信息呢?假设我需要产生一个Line对象,使用Adapter如何根据Line类来更改display()的方法实现呢??

得出如下类图:

每个适配器对应不同的子类,对目标类进行不同处理,得到不同的适配效果。

 

而查阅了该模式的优缺点如下:

类适配器还有的优点:

  1、由于适配器类是适配者类的子类,因此可以再适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

  2、把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和他的子类都适配到目标接口。

类适配器缺点

  1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和他的子类同时适配到目标接口。

 

 

posted @ 2014-03-29 23:32  谌皓徽  阅读(417)  评论(0编辑  收藏  举报