您的位置:首页 > 其它

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

2014-03-29 23:32 671 查看
一般适配器模式类图如下:



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

1.解决的问题

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

2.原理

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

3.基本代码

  

/**
* 目标类
* */
public interface Target {
void request();
}
/**
*
* 源类
*
*/
public class Adaptee {
public void request(){
System.out.println("method run!");
}
}
/**
*
* 适配器类
*
*/
class Adapter implements Target {

private Adaptee adaptee;

public Adapter (Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
//经过接口维护,将adaptee重用
this.adaptee.request();
System.out.println("method change!");
}
}


public static void main(String[] args) {
AdapterGof adaptergof = new AdapterGof();
Adaptee adaptee = adaptergof.new Adaptee();
Target adapter =adaptergof.new Adapter(adaptee);
}



4.例子-得出疑问

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



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



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



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


得出如下类图:



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

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


类适配器还有的优点:

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

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

类适配器缺点

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: