设计模式——适配器模式

适配器模式就是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式分为两种,一种是类适配器模式,一种是对象适配器模式(也就是跟我们的组合模式配合使用)
适用性:
1.你想使用一个已经存在的类,而它的接口不符合你的需求。
2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
在我们的日常生活中所使用的充电器就是最好的适配器模式,我们的手机都是需要充电的,如果没有充电器的话,我们的手机是不可能自己会接收。
这里写图片描述
下面我们就以手机充电来
电源

public class PowerSupply {
    public void request(){
        System.out.println("我是电源");
    }
}

接口

public interface Target {
    void handleRequest();
}

充电器

public class Adapter extends PowerSupply implements Target {
    @Override
    public void handleRequest() {
        super.request();
    }
}

手机

public class Phone extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainActivity mainActivity = new MainActivity();
        Target target = new Adapter();
        mainActivity.test(target);
    }

    public void test(Target t){
        t.handleRequest();
    }
}

上面的适配器模式是一个类适配器模式,也就是说Adapter extends PowerSupply 因为继承只能单继承,导致不够灵活,所以我们还有另一种适配器可以跟我们的组合一起使用叫做对象适配器模式。
修改后的对象适配器模式为

public class ObjectAdapter implements Target {
    private PowerSupply powerSupply;

    public ObjectAdapter(PowerSupply powerSupply) {
        this.powerSupply = powerSupply;
    }

    @Override
    public void handleRequest() {
        powerSupply.request();
    }
}

手机里面的调用就有了稍微的改变

public class Phone extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MainActivity mainActivity = new MainActivity();
        PowerSupply powerSupply = new PowerSupply();
        Target target = new ObjectAdapter(powerSupply);
        mainActivity.test(target);
    }

    public void test(Target t){
        t.handleRequest();
    }
}

适配器模式到这里就结束了,如有疑问欢迎留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值