• 设计模式(七)桥接模式


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

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

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

     

    如上图所示,用多层继承结构可以实现,但会出现扩展性问题以及违反单一职责原则(一个类,有两个引起这个类变化的原因)

    如上图 运用桥接模式

    1. 创建一个品牌Brand接口,并创建两个类实现该接口

     1 package com.ztq.bridge;
     2 
     3 /***
     4  * 品牌
     5  * @author ZTQ
     6  *
     7  */
     8 public interface Brand {
     9     void sale();
    10 }
    11 
    12 class Lenovo implements Brand{
    13 
    14     @Override
    15     public void sale() {
    16         System.out.println("销售联想电脑");
    17     }
    18     
    19 }
    20 
    21 class Dell implements Brand{
    22 
    23     @Override
    24     public void sale() {
    25         System.out.println("销售戴尔电脑");
    26     }
    27     
    28 }

    2. 创建机型Computer类,并创建子类

     1 package com.ztq.bridge;
     2 
     3 /***
     4  * 电脑类型的维度
     5  * @author ZTQ
     6  *
     7  */
     8 public class Computer{
     9     protected Brand brand;
    10 
    11     public Computer(Brand brand) {
    12         this.brand = brand;
    13     }
    14 
    15     public void sale(){
    16         brand.sale();
    17     }
    18     
    19 }
    20 
    21 class Desktop extends Computer{
    22 
    23     public Desktop(Brand brand) {
    24         super(brand);
    25     }
    26     
    27     public void sale(){
    28         super.sale();
    29         System.out.println("销售台式机");
    30     }
    31     
    32 }
    33 
    34 class Laptop extends Computer{
    35 
    36     public Laptop(Brand brand) {
    37         super(brand);
    38     }
    39     
    40     public void sale(){
    41         super.sale();
    42         System.out.println("销售笔记本");
    43     }
    44     
    45 }

    3.  测试类Client

     1 package com.ztq.bridge;
     2 
     3 public class Client {
     4     public static void main(String[] args) {
     5         //销售联想笔记本
     6         Computer c = new Laptop(new Lenovo());
     7         c.sale();
     8         
     9         //销售戴尔台式机
    10         Computer c2 = new Desktop(new Dell());
    11         c2.sale();
    12     }
    13 }

    结果

    销售联想电脑
    销售笔记本
    销售戴尔电脑
    销售台式机

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

    ——JDBC驱动程序

    ——AWT中的Peer架构

    ——银行日志管理:

      格式分类:操作日志、交易日志、异常日志

      距离分类:本地记录日志、异地记录日志

    ——人力资源系统中的奖金计算模块:

      奖金分类:个人奖金、团队奖金、激励奖金

      部门分类:人事部门、销售部门、研发部门

    ——OA系统中的消息处理:

      业务类型:普通消息、加急消息、特急消息

      发送消息方式:系统内消息、手机短信、邮件

  • 相关阅读:
    Gson简要使用笔记
    android入门到熟练(五)---广播
    95&&96.Unique Binary Search Trees I&&II
    day 08 文件操作
    07 深浅拷贝
    06 day小数据池
    05,.字典,集合
    列表和元组
    字符串
    while 循环,格式化输出和运算编码
  • 原文地址:https://www.cnblogs.com/zhangtianq/p/6075822.html
Copyright © 2020-2023  润新知