桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。
桥接模式将继承关系转化成关联关系(一个维度持有另一个维度的引用),它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。
实现系统可能有多个角度分类,每一种角度都可能变化,
那么把这种多角度分类给分离出来让他们独立变化,减少他们之间耦合。
桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化,这就是桥接模式的用意。
模式场景我们就采用哪个画图的。其UML结构图如下
package bridge;
/**
* 品牌
*/
public interface Brand {
void sale();
}
package bridge;
public class AppleBrand implements Brand {
@Override
public void sale() {
System.out.print("苹果品牌");
}
}
package bridge;
public class ASUSBrand implements Brand {
@Override
public void sale() {
System.out.print("华硕品牌");
}
}
package bridge;
public class DellBrand implements Brand {
@Override
public void sale() {
System.out.print("戴尔品牌");
}
}
package bridge;
public class Computer {
private Brand brand;
public Computer(Brand brand) {
this.brand = brand;
}
public void sale() {
brand.sale();
}
}
package bridge;
public class BookComputer extends Computer {
public BookComputer(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("笔记本在销售");
}
}
package bridge;
public class DeskComputer extends Computer {
public DeskComputer(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("台式机在销售");
}
}
package bridge;
public class Test {
public static void main(String[] args) {
Computer AsusDeskComputer = new DeskComputer(new ASUSBrand());
AsusDeskComputer.sale();
Computer DellBookComputer = new BookComputer(new DellBrand());
DellBookComputer.sale();
}
}
结果:
华硕品牌台式机在销售
戴尔品牌笔记本在销售
桥接模式总结:
桥接模式使用场景: