Bridge
处理多继承的关系,如要多加个品牌,或者增加个智能手机
场景分析
– 商城系统中常见的商品分类,以电脑为类,如何良好的处理商品分类销售的问题?
– 这个场景中有两个变化的维度:电脑类型、电脑品牌。
品牌一个接口
package com.xiaoqiang.gof23.structureModel.bridge;
/**
* @author xiaoqiang
* @date $(DATE)-$(TIME)
*/
public interface Brand {
void sale();
}
class Lenovo implements Brand {
@Override
public void sale() {
System.out.println("销售联想电脑");
}
}
class Dell implements Brand {
@Override
public void sale() {
System.out.println("销售戴尔电脑");
}
}
电脑产品
package com.xiaoqiang.gof23.structureModel.bridge;
/**
* @author xiaoqiang
* @date $(DATE)-$(TIME)
*/
public abstract class Computer {
protected Brand brand;
public Computer(Brand brand) {
this.brand = brand;
}
public void sale() {
brand.sale();
}
}
class Desktop extends Computer {
public Desktop(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("销售台式机");
}
}
class Laptop extends Computer {
public Laptop(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("销售笔记本");
}
}
就这样吧 者连个维度组合在一起 当要增加一个品牌是只要多个实现Brand的类,而增加一个产品比如智能手机是只要多一个Phone的抽象类与Brand组合就行
总结:
– 桥接模式可以取代多层继承的方案。 多层继承违背了单一职责原则,
复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个
数,从而降低管理和维护的成本。
– 桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一
个维度,都不需要修改原有的系统,符合开闭原则