桥接模式

桥接模式(bridge)

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

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

桥接模式实际开发中应用场景
  JDBC驱动程序
  AWT中的Peer架构
  银行日志管理:
    格式分类:操作日志、交易日志、异常日志
    距离分类:本地记录日志、异地记录日志
  人力资源系统中的奖金计算模块:
    奖金分类:个人奖金、团体奖金、激励奖金。
    部门分类:人事部门、销售部门、研发部门。
  OA系统中的消息处理:
    业务类型:普通消息、加急消息、特急消息
    发送消息方式:系统内消息、手机短信、邮件

ex:
  商城系统中常见的商品分类, 以电脑为类, 如何良好的处理商品的分类销售的问题
  扩展性问题(类个数膨胀问题)
    1.如果要增加一个新的电脑类型,则要增加各个品牌下面的类,
    2.如果要增加一个新的品牌, 也要增加各种电脑类型的类
  违反单一职责原则: 一个类有两个引起这个类变化的原因

//品牌
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("销售Dell电脑");
    }
}

class Shenzhou implements Brand {
    
    @Override
    public void sale() {
        System.out.println("销售神舟电脑");
    }
}
//电脑类型的维度
public class Computer2 {

    protected Brand brand;

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

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

class Desktop2 extends Computer2 {    

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

class Laptop2 extends Computer2 {
    public Laptop2(Brand b) {
        super(b);
    }
    @Override
    public void sale() {
        super.sale();
        System.out.println("销售笔记本");
    }
}
public class Client {
    public static void main(String[] args) {
        //销售联想的笔记本电脑
        Computer2  c = new Laptop2(new Lenovo());
        c.sale();
        
        //销售神舟的台式机
        Computer2 c2 = new Desktop2(new Shenzhou());
        c2.sale();
    }
}

 

posted @ 2019-07-31 17:01  笑长不爱笑QvQ  阅读(168)  评论(0编辑  收藏  举报