Java设计模式----桥接模式

2018-04-26  本文已影响31人  GaaraZ

场景

商城系统中常见的商品分类,以电脑为例,如何良好的处理商品分类销售的问题?

package bridge;

public interface Computer {
    void sale();
}

class Desktop implements Computer{
    public void sale() {
        System.out.println("销售台式机!");
    }
}

class Laptop implements Computer{
    public void sale() {
        System.out.println("销售笔记本!");
    }
}

class Pad implements Computer{
    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 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("销售戴尔平板!");
    }
}

class HpDesktop extends Desktop{
    @Override
    public void sale() {
        System.out.println("销售惠普台式机!");
    }
}

class HpLaptop extends Laptop{
    @Override
    public void sale() {
        System.out.println("销售惠普笔记本!");
    }
}

class HpPad extends Pad{
    @Override
    public void sale() {
        System.out.println("销售惠普平板!");
    }
}

问题

场景分析

商城系统中常见的商品分类,以电脑为例,如何良好的处理商品分类销售的问题?
这个场景中有两个变化的维度:电脑类型、电脑品牌。


桥接模式核心要点:

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


桥接模式
package bridge;

public interface Brand{
    void sale();
}

class Lenovo implements Brand{
    public void sale() {
        System.out.println("销售联想");
    }
}

class Dell implements Brand{
    public void sale() {
        System.out.println("销售戴尔");
    }
}
package bridge;

public abstract class Computer2 {
    protected Brand brand;

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

    public abstract void sale();
}

class Desktop2 extends Computer2{

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

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

class Laptop2 extends Computer2{

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

    @Override
    public void sale() {
        brand.sale();
        System.out.println("销售笔记本");
    }
}
package bridge;

public class Client {
    public static void main(String[] args) {
        Computer2 computer = new Laptop2(new Lenovo());
        computer.sale();
    }
}
输出:
销售联想
销售笔记本

桥接模式总结

桥接模式实际开发中应用场景

上一篇 下一篇

猜你喜欢

热点阅读