桥接模式(bridge)

桥接模式:

  • 处理多层继承结构,处理多维度变化的场景,将各个维度设计师成独立的继承结构,使用各个维度可以独立的扩展在抽象层建立关联

以电脑为类,分为电脑类型与电脑品牌两个维度

package designmode.bridge.interfaces;
/**
 * 电脑抽象类
 * @author baiyi
 *
 */
public abstract class Computer {
    protected Brand brand;

    public Computer(Brand brand) {
        this.brand = brand;
    }
    public abstract void sale();
}
package designmode.bridge.interfaces;
/**
 * 品牌接口
 * @author baiyi
 *
 */
public interface Brand {
    public String getName();
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
import designmode.bridge.interfaces.Computer;
public class Desktop extends Computer{
    public Desktop(Brand brand) {
        super(brand);
    }

    public void sale() {
        System.out.printf("销售%s台式电脑%n",super.brand.getName());
    }
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
import designmode.bridge.interfaces.Computer;
public class Laptop extends Computer{
    public Laptop(Brand brand) {
        super(brand);
    }
    @Override
    public void sale() {
        System.out.printf("销售%s笔记本电脑%n",super.brand.getName());
    }

}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
import designmode.bridge.interfaces.Computer;
public class Pad extends Computer{
    public Pad(Brand brand) {
        super(brand);
    }
    @Override
    public void sale() {
        System.out.printf("销售%s平板电脑%n", super.brand.getName());
    }
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
public class Lenovo implements Brand{
    private final String NAME = "联想";
    @Override
    public String getName() {
        return this.NAME;
    }
}
package designmode.bridge.pojo;
import designmode.bridge.interfaces.Brand;
public class Dell implements Brand{
    private final String NAME = "戴尔";
    @Override
    public String getName() {
        return this.NAME;
    }
}
package designmode.bridge.test;
import designmode.bridge.interfaces.Computer;
import designmode.bridge.pojo.Dell;
import designmode.bridge.pojo.Desktop;
import designmode.bridge.pojo.Laptop;
import designmode.bridge.pojo.Lenovo;
import designmode.bridge.pojo.Pad;
public class Client {
    public static void main(String[] args) {
        Computer c = new Laptop(new Lenovo());
        c.sale();
        Computer c1 = new Desktop(new Lenovo());
        c1.sale();
        Computer c2 = new Desktop(new Dell());
        c2.sale();
        Computer c3 = new Pad(new Lenovo());
        c3.sale();
    }
}

测试结果:

  • 桥接模式可以取代多层继承的方案,多层继承违背了单一职责原则,复用性较差,类的个数也非常多,桥接模式可以极大的减少子类的个数,从而降低管理和维护成本。

  • 桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。



来自为知笔记(Wiz)


posted on 2021-02-13 22:04  白衣风云  阅读(245)  评论(0编辑  收藏  举报

导航