Java设计模式之适配器模式

**

Java - 适配器模式

**
概述

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

解决的问题

  即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

模式中的角色

  3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

  3.2 需要适配的类(Adaptee):需要适配的类或适配者类。

  3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。 
  

优点

     通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单、更直接、更紧凑。

    复用了现存的类,解决了现存类和复用环境要求不一致的问题。

    将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。

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

缺点

    对于对象适配器来说,更换适配器的实现过程比较复杂。

适用场景

     系统需要使用现有的类,而这些类的接口不符合系统的接口。

     想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

     两个类所做的事情相同或相似,但是具有不同接口的时候。

     旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。

     使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。

Target.java

package com.lxf.adapter;

/**
 * @address BeiJing
 * @author LiXufei
 *  目标接口<三孔插座>
 */
public interface Target {

    //定义方法 使用三孔插座
    public void powerWithThree();

}

Adaptee.java

package com.lxf.adapter;

/**
 * @address BeiJing
 * @author LiXufei
 *  需要适配器的类 <二孔插座>
 */
public class Adaptee {

    //定义方法 使用二孔插座
    public void powerWithTwo(){
        System.out.println("充电");
    }

}

Adapter.java

package com.lxf.adapter;

/**
 * @address BeiJing
 * @author LiXufei
 * 适配器
 */
public class MyAdapter implements Target {

     // 直接关联被适配类  
    //传入需要转换的二孔插座
    private Adaptee mAdaptee;

     // 可以通过构造函数传入具体需要适配的被适配类对象
    public MyAdapter(Adaptee mAdaptee) {
        this.mAdaptee = mAdaptee;
    }

    public void powerWithThree() {  
        // 这里是使用委托的方式完成特殊功能  
        System.out.println("调用三孔插座的方法");
        //充电
        this.mAdaptee.powerWithTwo();
    }

}

NotePad.java

package com.lxf.adapter;

/**
 * @address BeiJing
 * @author LiXufei
 *  笔记本电脑测试类
 */
public class NotePad {

    //希望使用三孔插孔通电
    private Target mTarget;

    public NotePad(Target mTarget) {
        this.mTarget = mTarget;
    }

    //充电的方法
    public void charge(){
        mTarget.powerWithThree();
    }

    public static void main(String[] args) {

        //我们只有二孔插座
        //需将二孔插座通过适配成三孔插座
        Adaptee _Adaptee = new Adaptee();
        Target _Target = new MyAdapter(_Adaptee);
        NotePad _NotePad = new NotePad(_Target);
        _NotePad.charge();

    }

}

输出结果:

调用三孔插座的方法
充电

你可能感兴趣的:(Android)