适配器模式-Adapter

名称:

    适配器模式(Adapter Pattern)-类对象结构型模式

    别名:包装器Wrapper

 

问题:

    The Adapter pattern acts as an intermediary between two classes, converting the interface of one class so that it can be used with the other. This enables classes with incompatible interfaces to work together.

    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

 

适用性:

    -你想使用一个已经存在的类,而它的接口不符合你的 需求。

    -你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。

    -你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它的接口。对象适配器可以适配它的父类接口。

 

协作:

     Client在Adapter实例上调用一些操作。接着适配器调用Adaptee的操作实现这个请求。

 

优点和缺点: 

  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
  • 缺点是过多的使用适配器,会让系统非常的凌乱。
  • 单继承,只能适配一种。

    类适配器

    1、用的一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

    2、使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

    3、仅仅引入了一个对象,并不需要额外的指针以间接得到adaptee。

    对象适配器

    1、允许一个Adapeter与多个Adaptee同时工作。Adapter也可以一次给所有的Adaptee添加功能。

    2、使得重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

    

解决方案:

    

1、 模式的参与者

    1、Target

    -定义Client使用的与特定领域相关的接口。

    2、Client

    -与符合Target接口的对象协同。

    3、Adaptee

    -定义一个已经存在的接口,这个接口需要适配。

    4、Adapter

    -对Adaptee的接口与Target接口进行适配。

2.实现方式

interface Target
{
    public void request();
}

 

class Adaptee
{
    public void adaptedRequest()
    {       
        System.out.println("adaptRequest!");
    }
}
class ClassAdapter extends Adaptee implements Target
{
    public void request()
    {
        adaptedRequest();
    }
}
public class ClassAdapterTest
{
    public static void main(String[] args)
    {
        Target target = new ClassAdapter();
        target.request();
    }
}

 

参考资料

《设计模式:可复用面向对象软件的基础》

    

posted @ 2020-06-23 16:31  diameter  阅读(123)  评论(0编辑  收藏  举报