桥接模式
桥接模式是将抽象部分与它的实现部分实现部分的的分离,使它们都可以独立的变化。
我的理解
桥接模式有点和聚合很类似,上图中的Abstraction(最好是抽象类)作为Bridge的角色,它右边的Implementation作为一个它(Abstraction)的一个聚合的元素传入构造方法中。因为传入的不是具体的实现类,而是抽象的接口,因此它们之间的变化不会互相影响。
实现步骤
实现一个”被桥接“的抽象类
实现一个桥(可以是抽象的也可以是具体的、但最好是抽象的)
桥的构造方法中需要传入“被桥接”的对象。(聚合)
客户端创建一个具体的桥的实现类,并往实现类中传入需要“被桥接”的对象即可。如下所示
//被桥接的接口(品牌)
public interface Brand {
void info();
}
//品牌实现类1
public class Apple implements Brand {
@Override
public void info(){
System.out.print("苹果");
}
}
//品牌实现类2
public class HuaWei implements Brand {
@Override
public void info() {
System.out.print("华为");
}
}
//桥类(设备)
public abstract class Device {
/**
* Device充当了Bridge的角色。将设备(Device)和品牌(Brand)连接起来
* Brand聚合到Device中,因为Brand是一个抽象的接口,从而降低耦合关系
*/
protected Brand brand;
public Device(Brand brand) {
this.brand = brand;
}
public void info(){
brand.info();
}
}
//具体设备
class Phone extends Device{
public Phone(Brand brand) {
super(brand);
}
public void info() {
super.info();
System.out.println("手机");
}
}
//具体设备
class Laptop extends Device{
public Laptop(Brand brand) {
super(brand);
}
public void info() {
super.info();
System.out.println("笔记本");
}
}
//客户端
public class Client {
public static void main(String[] args) {
//创建一个苹果电脑
Laptop appleLaptop = new Laptop(new Apple());
appleLaptop.info();
//创建华为手机
Phone huaweiPhone = new Phone(new HuaWei());
huaweiPhone.info();
}
}