zoukankan      html  css  js  c++  java
  • java23种设计模式(四)-- 桥接模式

    参考地址:http://www.jasongj.com/design_pattern/bridge/

    实现系统可从多种维度分类,桥接模式将各维度抽象出来,各维度独立变化,之后可通过聚合,将各维度组合起来,减少了各维度间的耦合。

    代码示例:

    1、创建一个车的抽象类(车可以按照牌子分类--BMW,BenZ,Land Rover等,也可以按照变数器分类--手动档、自动档、手自一体)

     1 /**
     2  * author:YZH
     3  * time: 2019/6/11 14:27
     4  * description: 创建抽象类车,并将车的变速器设置为车的一个属性
     5  **/
     6 public abstract class Car {
     7     protected    Transmission transmission;
     8 
     9     protected abstract void run();
    10 
    11 
    12     public void setTransmission(Transmission transmission){
    13         this.transmission = transmission;
    14     }
    15 }
    View Code

    2、创建变速器接口

    /**
     * author:YZH
     * time: 2019/6/11 14:28
     * description: 创建抽象类的车的变速器
     **/
    public interface    Transmission {
    
         void gear();
    }

    3、创建BMW牌的车(继承Car)

     1 /**
     2  * author:YZH
     3  * time: 2019/6/11 14:39
     4  * description: BMWCar
     5  **/
     6 public class BMWCar extends  Car{
     7     @Override
     8     protected void run() {
     9         transmission.gear();
    10         System.out.println("BMW is running");
    11     }
    12 }
    View Code

    4、创建手动挡(实现Transmission )

     1 /**
     2  * author:YZH
     3  * time: 2019/6/11 14:41
     4  * description: 手动挡
     5  **/
     6 public class ManualTransmission implements Transmission {
     7     @Override
     8     public void gear() {
     9         System.out.println("Manual transmission");
    10     }
    11 }
    View Code

    5、代码调用

     1 /**
     2  * author:YZH
     3  * time: 2019/6/11 14:42
     4  * description: 测试代码
     5  **/
     6 public class BridgeClient {
     7     public static void main(String[] args) {
     8         Transmission transmission = new ManualTransmission();
     9         Car bwmCar = new BMWCar();
    10         bwmCar.setTransmission(transmission);
    11 
    12         bwmCar.run();
    13     }
    14 }
    View Code

    6、输出结果

    Manual transmission
    BMW is running

    提示:如果还要创建不同品牌的车,并指定不同的变速器,只需要继承Car,新增变速器类型(实现Transmission )即可。

  • 相关阅读:
    各种blog尝试后,发现wordpress适用起来最方便
    索引器(C# 编程指南)
    vue3 父子组件之间的传值
    vue3 + vite + ts 搭建项目
    vue3中使用全局变量
    用JSONKit库解析json文件
    程序内部让用户直接上appstore评价游戏的链接地址以及跳转方法
    常见错误:Apple MachO Linker Error
    常见错误:多线程界面元素显示错误
    常见错误:Undefined symbols for architecture i386
  • 原文地址:https://www.cnblogs.com/cq-yangzhou/p/11005481.html
Copyright © 2011-2022 走看看