适配器模式

概念:把现有的一个类的接口转化为客户端期望的另一种接口,使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

优点:
1.可以让任何没有关联的两个类一起运行。
2.提高了类的复用。
3.增加了类的透明度。
4.灵活性好。
缺点:
过多的使用适配器,会让系统非常零乱。

适配器模式分为主要分为类适配器模式对象适配器模式

uml图:
在这里插入图片描述

在这里插入图片描述

目标角色(Target):,期望得到的接口;
源角色(Adaptee):现在已经有的类,需要适配的接口;
适配器角色(Adapter):把源接口转换为目标接口;

类适配器模式和对象适配器模式在形式上的区别是,类适配器模式对源角色采用了继承,而对象适配器模式对源角色采用的是调用。
举一个网上买的Type-c耳机转接头的例子, 设置一个适配器将Type-c接口转换为耳机的圆口。

先写一下类适配器模式:

package adapter;

public interface TargetCylinder {
    //目标接口是期望转换为圆筒
    public String convertCylinder();
}
package adapter;

public class AdapterTypeC {
    //被适配类,Type_c接口
    public String typyC(){
       return "Type_c接口";
    }
}
package adapter;

public class HeadsetAdapter  extends AdapterTypeC implements TargetCylinder{
    //耳机适配器,将Type_c接口转换为圆筒接口
    @Override
    public String convertCylinder(){
            return "将"+super.typyC()+"转化为"+super.typyC().replace("Type_c接口","圆筒");
    }
}

package adapter;
public class Client {
    public static void main(String[] args) {
        //测试,是否转换
        HeadsetAdapter headsetAdapter=new HeadsetAdapter();
        System.out.println(headsetAdapter.convertCylinder());
    }
}

输出:

将Type_c接口转化为圆筒

下面是对象适配器的实现方法:(主要是适配器类中代码不一样,其他都一样,所以我就只贴HeadsetAdapter类中的代码了)

package adapter;

public class HeadsetAdapter implements TargetCylinder{
    //耳机适配器,将Type_c接口转换为圆筒接口
    private AdapterTypeC adapterTypeC;
    public HeadsetAdapter(AdapterTypeC adapterTypeC){
        this.adapterTypeC=adapterTypeC;
    }
    @Override
    public String convertCylinder(){
            return "将"+adapterTypeC.typyC()+"转化为"+adapterTypeC.typyC().replace("Type_c接口","圆筒");
    }
}
package adapter;
public class Client {
    public static void main(String[] args) {
        //测试,是否转换
        HeadsetAdapter headsetAdapter=new HeadsetAdapter(new AdapterTypeC());
        System.out.println(headsetAdapter.convertCylinder());
    }
}

输出;

将Type_c接口转化为圆筒

类适配器模式中耳机适配器HeadsetAdapter需要继承源角色, 对象适配器模式中耳机适配器HeadsetAdapter需要实例化源角色对象,建议尽量使用对象的适配器模式,多用合成/聚合、少用继承。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值