您的位置:首页 > 编程语言 > Java开发

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

2017-05-10 00:57 423 查看

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

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

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 extends XiaomiPhone 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盘
戴尔电脑使用小米数据线连接小米手机的数据接口
华硕电脑使用三星数据线连接三星手机的数据接口
戴尔电脑使用三星数据线连接三星手机的数据接口
华硕电脑使用小米数据线连接小米手机的数据接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息