设计模式---结构型模式之适配器模式(Adapter Pattern)

  • 适配器模式定义

    将一个类的接口,转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作无间。

    适配器模式主要有两种类型:对象适配器和类适配器。

    在详细解释这两种类型时,解释部分重要角色。生活中使用的笔记本电脑,都有电源适配器,这个电源适配器的作用就是将标准电压220V交流电转变为低压直流电,供电脑充电的一种装置。这个装置便是适配器模式中的适配器角色,而标准电压220V交流电便是电源(我们也可以简称为适配者对象),笔记本通过电源适配器,可以获取到适合自己使用的低压直流电,而不需要更改厂商的API,这就是适配器作用最大的地方。

  • 对象适配器 

    该种类型主要使用组合方式实现,适配器对象内部使用组合方式调用被适配者对象。 

package adapterpattern;
/**
 * 220V电压提供者
 * @author Administrator
 */
public class Adaptee {
    /**
     * 提供220V标准电压
     * @return
     */
    public int provideStandardVol(){
        return 220;
    }
}

package adapterpattern;

/**
 * 电源适配器目标接口,可以适配多种不同标准的笔记本
 * @author Administrator
 *
 */
public interface Target {
    public int getFitnessVol();
}

package adapterpattern;

/**
 * 电源适配器的实现
 * @author Administrator
 */
public class ObjcetTypeAdaptor implements Target{
    Adaptee adaptee;
    public ObjcetTypeAdaptor(Adaptee adaptee){
        this.adaptee = adaptee;
    }
    /**
     * 获取笔记本所需要的标准电压
     * @return
     */
    public int getFitnessVol(){
        int tmpVol = adaptee.provideStandardVol();
        System.out.println("获取标准电压:[" + tmpVol + "V]");
        System.out.println("Adaptor准备转换成适配电压");
        //此处为简单示例  TODO
        tmpVol = 19;
        System.out.println("Adaptor转换成适配电压[" + tmpVol + "V]");
        return tmpVol;

    }
}

  • 类适配器

    该种类型主要使用继承方式实现。适配器对象通过继承来调用被适配器对象方法。

package adapterpattern;

public class ClassTypeAdaptor extends Adaptee implements Target{

    /**
     * 获取笔记本所需要的标准电压
     * @return
     */
    public int getFitnessVol() {
        int tmpVol = provideStandardVol();
        System.out.println("获取标准电压:[" + tmpVol + "V]");
        System.out.println("Adaptor准备转换成适配电压");
        //此处为简单示例  TODO
        tmpVol = 19;
        System.out.println("Adaptor转换成适配电压[" + tmpVol + "V]");
        return tmpVol;
    }
}

package adapterpattern;

/**
 * 笔记本对象
 * @author Administrator
 *
 */
public class Computer {
    private Target target;

    public Computer(Target target){
        this.target = target;
    }

    public void working(){
        if(null != target && 0 != target.getFitnessVol()){
            System.out.println("已插电源适配器,准备工作ing。。。");
        }else{
            System.out.println("未插电源适配器或电源适配器损坏,无法工作");
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        //初始化一台标准220V电压
        Adaptee adaptee = new Adaptee();
        System.out.println("--------------对象适配器分割线开始-------------");
        //声明一个电源适配器
        Target adaptor1 = new ObjcetTypeAdaptor(adaptee);
        //开始构造一台电脑
        Computer computer1 = new Computer(adaptor1);
        computer1.working();
        System.out.println("笔记本1构造完毕,可以启动。。。。");
        System.out.println("--------------对象适配器分割线结束-------------");
        System.out.println("--------------类适配器分割线开始--------------");

        Target adaptor2 = new ClassTypeAdaptor();
        Computer computer2 = new Computer(adaptor2);
        computer2.working();
        System.out.println("笔记本2构造完毕,可以启动。。。。");
        System.out.println("--------------类适配器分割线结束--------------");
    }
}

/**
 * 输出:
 *    --------------对象适配器分割线开始-------------
 *    获取标准电压:[220V]
 *    Adaptor准备转换成适配电压
 *    Adaptor转换成适配电压[19V]
 *  已插电源适配器,准备工作ing。。。
 *  笔记本1构造完毕,可以启动。。。。
 *  --------------对象适配器分割线结束-------------
 *  --------------类适配器分割线开始--------------
 *  获取标准电压:[220V]
 *  Adaptor准备转换成适配电压
 *  Adaptor转换成适配电压[19V]
 *  已插电源适配器,准备工作ing。。。
 *  笔记本2构造完毕,可以启动。。。。
 *  --------------类适配器分割线结束--------------
 */

  • 两种类型适配器的比较

   通过以上两个例子:将适合笔记本低压直流电目标类和标准高压交流电的适配者类解耦,通过引入适配器类来改造适配者类,而无需修改适配者类代码。

   类适配器模式中类是适配者类的子类,适配器类可以通过重写来构造新的方法,灵活性更强,但是也具有一定局限性:对于不支持多重继承的语言,只能单继承。

   对象适配器模式中适配器类通过组合方式来调用适配者类,可以适配多个适配者类。该类型与类适配器模式相比,不能改变适配者的方法。

时间: 2024-08-02 18:51:59

设计模式---结构型模式之适配器模式(Adapter Pattern)的相关文章

设计模式-结构型模式,适配器模式(4)

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能.举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器.您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡. #!/usr/bin/env python # encoding: utf-8 class Target(object): def request(self

设计模式——结构型模式之适配器模式(二)

模式的定义与特点 适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作.适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些. 该模式的主要优点如下. 客户端通过适配器可以透明地调用目标接口. 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类. 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题.

设计模式——结构型模式

设计模式的另一大类型为结构型.共收录了7个模式,分别为适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式.下面从特点和使用两方面小探,欢迎交流!      适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.[大话设计模式]        特点:需要交流的两方,在数据和行为都匹配,但接口不符时,我们应该考虑用适配器,目的是促使交流和复用.可以理解为入乡随俗,相同的意思,不同的表达

看透设计模式-结构型模式

这里我们主要讨论 结构型模式 适配器模式,: ● Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类. ● Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系. ● Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,

设计模式 结构型模式

定义 定义 结构型模式,讨论的是如何将类和对象组合,形成更为复杂的结构.采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式). 类和对象构成更复杂的结构就像搭积木的过程,通过不同组合,形成不同形状. 主导思想 1.组合类和对象以形成更复杂的结构. 2.尽量使用关联关系来代替继承关系. 分类 结构型模式又分为对象结构型模式和类结构型模式. 对象结构型模式把多个类组合成一个更复杂的系统,在类结构模式中一般只存在继承和实现关系. 类结构型模式通过关联.

设计模式-结构型模式,python组合模式

设计模式上大的方向上分继承和组合,就是类模式和对象模式.此篇的组合模式非继承和组合概念中的组合.桥接 策略 代理 装饰者都用了组合,此组合非彼组合. 组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 这种模式创建了一个包含自己对象组的类.该类提供了修改相同对象组的方式. 我们通过下面的实例来演示组合模式的用法.

c#设计模式·结构型模式

看的过程中,发现好多模式都用过,只是没有总结,或者是不知道叫这个名字吧··· 这里列举结构型模式,适配器.桥接.过滤.组合.装饰器.外观.享元.代理, 适配器模式:将现存的对象放到新的环境里边去,但是接口不一样,其实就是添加一个类把新的接口包装一样 之前公司的wcf服务端就是这种模式,公司很多部门,不同部门不同的业务都有自己相应的服务,之前是分开的,用的服务多的时候开服务很麻烦,现在想把他们统一起来,就可以用这种方式,wcf服务以接口定义契约,在实现类中写具体业务,可以定义一个统一的空接口,然所

11结构型模式之适配器模式

概念 Adapter模式也叫适配器模式,是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式. 角色和职责 适用于:          是将一个类的接口转换成客户希望的另外一个接口.使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 案例 //输入220V电压,输出的是18V电压 #include <iostream> using namespace std; class Current18v { public: void use18vCurrent() { c

结构型模式:适配器模式

我们可能遇到过这样的问题:我们新买了一个显示器,但是由于电脑是几年以前的,不能直接连上使用,需要在连接的时候,安装一个转接头. 还有,我们使用的手机充电线有一个大大的头,而不是直接一根线连在手机上,手机上的充电电压一般是5v,9v等,但绝不是220v. 还有苹果的手机等等,很多时候都会遇到需要转接头的时候. 在我们软件开发的过程中,比如对某个产品升级,但是还是要兼容原来老的接口,可以使用一个新的类,他可以继承原来的老类也可以使用组合使用老类,保证原来的接口继续受到兼容.这就需要我们现在说的适配器