【知了堂学习笔记】——设计模式之适配器模式

【定义】
将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以相互合作。这个定义还好,说适配器的功能就是把一个接口转成另一个接口。
【使用场景】
1、已经存在的类的接口不符合我们的需求;
2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。
其实现方式主要有两种:
1.类的适配器模式(采用继承实现)
2.对象适配器(采用对象组合方式实现)

例子:手机充电器一般都是5V左右吧,咱天朝的家用交流电压220V,所以手机充电需要一个适配器(降压器)

先定义一个手机

package adapter;

public class Mobile {
    public void inputPower(V5Power v5Power){
            int provideV5Power = v5Power.provideV5power();
            System.out.println("我需要5v的电压,现在电压是:"+provideV5Power+"V");
    }
}

手机依赖于一个5v的接口

package adapter;

/**
 * 提供5v电压的接口
 * @author Administrator
 *
 */
public interface V5Power {
    public int provideV5power();
}

家用的电压提供220v

package adapter;

/**
 * 家用220v交流电
 * @author Administrator
 *
 */
public class V220Power {
    public int provideV220Power(){
        System.out.println("提供220v交流电");
        return 220;
    }
}

适配器:将220v转成5v

package adapter;

/**
 * 适配器,把220V电压变成5v
 * @author Administrator
 *
 */
public class V5PowerAdapter implements V5Power{

    private V220Power v220Power;

    public V5PowerAdapter(V220Power v220Power) {
        super();
        this.v220Power = v220Power;
    }

    public int provideV5power() {
        v220Power.provideV220Power();
        System.out.println("适配器:改变了电压!!!");
        return 5;
    }

}

测试:给手机充电

package adapter;


public class AdapterTest {
    public static void main(String[] args) {
        Mobile mobile = new Mobile();
        V5Power power = new V5PowerAdapter(new V220Power());
        mobile.inputPower(power);
    }
}

运行结果:

提供220v交流电
适配器:改变了电压!!!
我需要5v的电压,现在电压是:5V

【小结】

1、适配器模式也是一种包装模式,与之前的 Decorator 装饰模式同样具有包装的功能;此外,对象适配器模式还具有显式委托的意思在里面(其实类适配器也有这种意思,只不过比较隐含而已),那么我在认为它与 Proxy 代理模式也有点类似;

2、从上面一点对比来看, Decorator 、 Proxy、 Adapter 在实现了自身的最主要目的(这个得看各个模式的最初动机、描述)之外,都可以在包装的前后进行额外的、特殊的功能上的增减,因为我认为它们都有委托的实现意思在里面;

3、我所看的书中说适配器模式不适合在详细设计阶段使用它,它是一种补偿模式,专用来在系统后期扩展、修改时所用。

转载出处:http://blog.youkuaiyun.com/lmj623565791/article/details/25833393
http://blog.youkuaiyun.com/ymeng_bupt/article/details/6833480

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值