GOF之适配器模式

来源:互联网 发布:json rpc 2.0 php 编辑:程序博客网 时间:2024/05/16 23:01

                      GOF之适配器模式

                     GOF设计模式之适配器模式


 

 

                

 

 

 

 

从现在开始我们由建造模式进入到结构模式。相比于建造模式,结构模式或许对我们的设计的帮助是更大的。

我们一个产品弄完以后,不是就是一劳永逸了。我们需要对产品进行维护。所以说,如果在产品的设计的初衷,如果我们已经使用了比较好的结构模式的话,那么对于我们的产品的维护是很有帮助的。这是要注意的。

现在我们先来学习第一种结构模式之适配器模式。所谓的适配器模式,我们可以举一个简单的例子:

比如说如果我们的笔记本电脑需要连接一个机械键盘。但是笔记本电脑上的接口都是USB类型的接口。而机械键盘上的接口不是USB接口。那么如果不适用其它的工具的话,我们是不能够连接上的。所以我们需要使用一个工具,它的一边是USB接口的类型,一边是和机械键盘的接口相同的类型。这样的话,我们就可以使

机械键盘连接上电脑了。在这个例子中,其实电脑相当于目标对象,机械键盘(使用的是ps/2接口)相当于被适配的对象,它有一个功能就是可以打字。而我们所使用的工具就是适配器对象。这是要理解的。

其实生活中,还有很多这样的例子,比如,我有一个三孔的插座,但是我电器是俩个插孔的。这样的话,是不能够使用的。同样的,我也需要使用一个工具来完成转接。这样的一种能模式其实就是适配器模式。

在实际的应用当中,我们可以先建立一个适配器的接口,然后在写一个适配器接口的实现类。那么目标对象和

被适配的对象只需要和适配器对象打交道就可以了。这是要注意的。

其实适配器模式在产品的升级过程当中,是经常会使用到的。在产品升级的过程当中,我们不可能将1.0的产品

功能全部弄掉。在这种情况下,就需要大量的使用适配器模式。其实在IO流中的InputStreamReader中也使用到了

这种设计模式。这是要注意理解的。

 

 

         接下来我们来看一个实例:

 

        package com.lg.adapter;

 

/**

 * Created by 鏉庢灉 on 2016/8/8.

 */

/**

 * 这是一个被适配的对象。它可以完成一定的功能

 * @author 李果

 *

 */

public class Adaptee {

    public void haddleRequest() {

        System.out.println("正在处理请求");

    }

}

 

 

 

package com.lg.adapter;

 

/**

 * Created by 鏉庢灉 on 2016/8/8.

 */

/**

 * 这是一个被适配的对象。它可以完成一定的功能

 * @author 李果

 *

 */

public class Adaptee {

    public void haddleRequest() {

        System.out.println("正在处理请求");

    }

}

 

 

 

package com.lg.adapter;

 

/**

 * Created by 鏉庢灉 on 2016/8/8.

 */

 

/**

 *

 * @author 李果

 *这是实现了适配器接口的一个实现类。

 *在这里采用了组合的方式来 处理被适配的对象

 */

public class Adapter implements  Target {

    private Adaptee adaptee;//被适配的对象

 

    public Adapter(Adaptee adaptee) {

        this.adaptee = adaptee;

    }

 

    

    //通过这个方法来处理被适配的对象的功能

    @Override

    public void handleRequest() {

        adaptee.haddleRequest();

    }

}

 

 

 

package com.lg.adapter;

 

/**

 * Created by 鏉庢灉 on 2016/8/8.

 */

 

/**

 *

 * @author 李果

 *这是客户端的功能

 *在其中的一个方法中传入一个适配器对象的接口。

 *在接下来的方法中再进行处理

 */

public class Client {

    public static void test(Target target) {

        target.handleRequest();

    }

 

    public static void main(String[] args) {

        Adaptee adaptee = new Adaptee();

        Adapter adapter = new Adapter(adaptee);

        test(adapter);

    }

}

 

 

 

最后的结果的输出为:

正在处理请求

 

 

 

 

 

 

0 0