设计模式之桥接模式+适配器模式Java实现

桥接模式和适配器模式的比较

它们的共同点是桥接和适配器都是让两个类配合工作,它们的区别是出发点不同,适配器的出发点是改变已有的两个接口,让它们相容,可以结合那些功能上相似但是接口不同的类,桥接模式的出发点是分离抽象化和实现化,是两者的接口可以不同,目的是分离。
1. 桥接是先有桥,才有两端的东西
2. 适配是先有两边的东西,才有适配器

桥接是在桥好了之后,两边的东西还可以变化。

适配器模式通常在系统设计完成之后才会被使用。桥接模式则是在系统开始时就被使用。
类图
这里写图片描述
电脑抽象类先有了USB接口,可以用它来连接实现USB接口的物品,如U盘等,后来出现了手机,有三星手机有小米手机等,它们开始在设计的时候并没有实现USB接口,但是后来由于有连接电脑的需求,这时候就出现了三星手机数据线(适配器)和小米手机数据线(适配器),使得三星手机和小米手机在接口不符合电脑定义的USB接口的情况下连接上了电脑。
示例代码:

//接口:电脑接口
public interface ComputerInterface {
      void USB();
}
//抽象类:电脑
public abstract class Computer {
    protected ComputerInterface computerInterface;
    public Computer(ComputerInterface computerInterface) {
        this.computerInterface = computerInterface;
    }
    public abstract void connecct();
}
//华硕电脑
public class ASUSComputer extends Computer {
    public ASUSComputer(ComputerInterface computerInterface) {
        super(computerInterface);
    }

    @Override
    public void connecct() {
        System.out.print("华硕电脑");
        computerInterface.USB();
    }
}
 //戴尔电脑
public class DellComputer extends Computer {
    public DellComputer(ComputerInterface computerInterface) {
        super(computerInterface);
    }

    @Override
    public void connecct() {
        System.out.print("戴尔电脑");
        computerInterface.USB();
    }
}
//U盘
public class UDisk  implements ComputerInterface {
    @Override
    public void USB() {
        System.out.println("连接了U盘");
    }
}
//三星手机
public class SamsungPhone  {
    public void samungInterface(){
        System.out.println("三星手机的数据接口");
    }
}
//小米手机
public class XiaomiPhone {
    public void xiaomiInterface(){
        System.out.println("小米手机的数据接口");
    }
}
//三星手机数据线
public class SamungDataWireAdapter  implements ComputerInterface {
    private SamsungPhone samsungPhone;

    public SamungDataWireAdapter(SamsungPhone samsungPhone) {
        this.samsungPhone = samsungPhone;
    }

    @Override
    public void USB() {
        System.out.print("使用三星数据线连接");
        samsungPhone.samungInterface();
    }
}
//小米手机数据线
public class XiaomiDataWireAdapter implements ComputerInterface {
    private XiaomiPhone xiaomiPhone;

    public XiaomiDataWireAdapter(XiaomiPhone xiaomiPhone) {
        this.xiaomiPhone = xiaomiPhone;
    }

    @Override
    public void USB() {
        System.out.print("使用小米数据线连接");
        super.xiaomiInterface();
    }
}
public class BridgeAndAdapterPatternDemo {
    public static void main(String[] args) {
        //戴尔电脑连接上了U盘
        Computer dellComputer=new DellComputer(new UDisk());
        dellComputer.connecct();
        //戴尔电脑通过小米数据线连接上了小米手机
        dellComputer=new DellComputer(new XiaomiDataWireAdapter(new XiaomiPhone()));
        dellComputer.connecct();
        //华硕电脑使用三星数据线连接三星手机的数据接口
        Computer asusComputer=new ASUSComputer(new SamungDataWireAdapter(new SamsungPhone()));
        asusComputer.connecct();
        //戴尔电脑使用三星数据线连接三星手机的数据接口
        Computer dellComputer1=new DellComputer(new SamungDataWireAdapter(new SamsungPhone()));
        dellComputer1.connecct();
        //华硕电脑使用小米数据线连接小米手机的数据接口
        Computer asusComputer1=new ASUSComputer(new XiaomiDataWireAdapter(new XiaomiPhone()));
        asusComputer1.connecct();
    }
}

运行结果:

戴尔电脑连接了U盘
戴尔电脑使用小米数据线连接小米手机的数据接口
华硕电脑使用三星数据线连接三星手机的数据接口
戴尔电脑使用三星数据线连接三星手机的数据接口
华硕电脑使用小米数据线连接小米手机的数据接口

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值