zoukankan      html  css  js  c++  java
  • 设计模式(七)桥接模式

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

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

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

     

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

    如上图 运用桥接模式

    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系统中的消息处理:

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

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

  • 相关阅读:
    vue路由对象($route)参数简介
    原生js写ajax请求(复习)
    js,jq.事件代理(事件委托)复习。
    CSS 设置table下tbody滚动条
    H5 调用手机摄像机、相册功能
    css实现六边形图片(最简单易懂方法实现高逼格图片展示)
    input表单的type属性详解,不同type不同属性之间区别
    js对象,set和get方法 的三种实现形式
    day03 变量
    day01 js三种导入html的方法、js书写规范、变量的基本使用、变量提升
  • 原文地址:https://www.cnblogs.com/zhangtianq/p/6075822.html
Copyright © 2011-2022 走看看