• 桥接模式


    桥接模式(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();
        }
    }
  • 相关阅读:
    压测基础
    性能压测终极武器之arthas
    python 返回当前文件夹下的所有文件的绝对路径;打印文件中的中文字符
    python 虚拟环境及项目快速迁移
    python3 解决bytes转str时抛“UnicodeDecodeError”异常
    mac系统环境变量
    kafka生产消费消息
    mac pycharm打不开问题
    jmeter获取毫秒时间戳
    两种方式 获取数据库某个表中所有的数据数量条数
  • 原文地址:https://www.cnblogs.com/yslf/p/11277573.html
Copyright © 2020-2023  润新知