桥接模式

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

没有桥接模式的小栗子

package com.principle.bridge;

public interface Computer {

    void sale();

}

class Desktop implements Computer {

    @Override
    public void sale() {
        System.out.println("销售台式机");
    }
}
class Laptop implements Computer {
    
    @Override
    public void sale() {
        System.out.println("销售笔记本");
    }
}
class Pad implements Computer {
    
    @Override
    public void sale() {
        System.out.println("销售平板");
    }
}

class LenovoDesktop extends Desktop{
    @Override
    public void sale() {
        System.out.println("销售联想台式机");
    }
}
class LenovoLaptop extends Laptop{
    @Override
    public void sale() {
        System.out.println("销售联想笔记本");
    }
}
class LenovoPad extends Pad{
    @Override
    public void sale() {
        System.out.println("销售联想平板");
    }
}
class ShenzhouDesktop extends Desktop{
    @Override
    public void sale() {
        System.out.println("销售神州台式机");
    }
}
class ShenzhouLaptop extends Laptop{
    @Override
    public void sale() {
        System.out.println("销售神州笔记本");
    }
}
class ShenzhouPad extends Pad{
    @Override
    public void sale() {
        System.out.println("销售神州平板");
    }
}
class DellDesktop extends Desktop{
    @Override
    public void sale() {
        System.out.println("销售戴尔台式机");
    }
}
class DellLaptop extends Laptop{
    @Override
    public void sale() {
        System.out.println("销售戴尔笔记本");
    }
}
class DellPad extends Pad{
    @Override
    public void sale() {
        System.out.println("销售戴尔平板");
    }
}
TIM截图20190421204016.png

使用桥接模式的小栗子:

package com.principle.bridge;

public interface Brand {

    void sale();
}

class Lenove implements Brand {

    @Override
    public void sale() {
        System.out.println("销售联想电脑");
    }
}

class Dell implements Brand {

    @Override
    public void sale() {
        System.out.println("销售戴尔电脑");
    }
}
package com.principle.bridge;

public class Computer2 {
    protected Brand brand;

    public Computer2(Brand brand) {
        this.brand = brand;
    }

    public void sale() {
        brand.sale();
    }

}

class Desktop2 extends Computer2 {

    public Desktop2(Brand brand) {
        super(brand);
    }

    @Override
    public void sale() {
        super.sale();
        System.out.println("销售台式机");
    }
}

class Laptop2 extends Computer2 {
    
    public Laptop2(Brand brand) {
        super(brand);
    }
    
    @Override
    public void sale() {
        super.sale();
        System.out.println("销售笔记本");
    }
}
package com.principle.bridge;

public class Client {
    
    public static void main(String[] args) {
        Computer2 computer2=new Laptop2(new Lenove());
        computer2.sale();
    }

}
结果打印:
销售联想电脑
销售笔记本
TIM截图20190421214737.png

桥接模式总结:

  • 桥接模式可以取代多层继承的方案。多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
  • 桥接模式极大地提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。

你可能感兴趣的:(桥接模式)