Java设计模式之桥接模式 - Go语言中文社区

Java设计模式之桥接模式


  • 桥接模式

    将抽象部分与它的实现部分分离,使它们都可以独立地变化。

  • 适用性

    1)你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
    例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
    2)类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
    这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
    3)对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
    4)你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。

  • 举例

    1)一个公司,有产品,具体有服装公司、汽车公司、食品公司等。
    2)一个产品,具体可以包含服装、汽车、食品等。

  • UML类图
    桥接模式(Bridge)

  • 代码示例

    • 定义一个产品抽象类
      package com.jin.demo.DesignPatterns.Bridge;
      
      /**
       * 产品
       * @auther jinsx
       * @date 2019-05-07 09:02
       */
      public abstract class Product {
      
          // 不管什么产品,都要生产
          public abstract void make();
          // 不管什么产品,都要销售
          public abstract void sell();
      
      }
      
    • 定义产品具体实现
      内衣
      package com.jin.demo.DesignPatterns.Bridge;
      
      /**
       * @auther jinsx
       * @date 2019-05-07 09:14
       */
      public class Shirt extends Product {
      
          @Override
          public void make() {
              System.out.println("生产内衣衬衫");
          }
      
          @Override
          public void sell() {
              System.out.println("内衣衬衫卖出去啦...");
          }
      }
      
      外套
      package com.jin.demo.DesignPatterns.Bridge;
      
      /**
       * @auther jinsx
       * @date 2019-05-07 09:09
       */
      public class Jacket extends Product {
      
          @Override
          public void make() {
              System.out.println("生产外套恰克");
          }
      
          @Override
          public void sell() {
              System.out.println("外套恰克卖出去啦...");
          }
      }
      
    • 定义一个公司抽象类,并维护指向产品对象的指针
      package com.jin.demo.DesignPatterns.Bridge;
      
      /**
       * 我是一个公司
       * @auther jinsx
       * @date 2019-05-07 09:24
       */
      public abstract class Corp {
          // 我要生产服装
          private Product product;
      
          public Corp(Product product) {
              this.product = product;
          }
          // 公司是用来挣钱的
          public void makeMoney(){
              this.product.make();
              this.product.sell();
          }
      }
      
    • 创建一个具体的公司,服装公司
      package com.jin.demo.DesignPatterns.Bridge;
      
      /**
       * 这是一个服装公司
       * @auther jinsx
       * @date 2019-05-07 09:28
       */
      public class ClothingCorp extends Corp {
      
          public ClothingCorp(Product product) {
              super(product);
          }
      
          @Override
          public void makeMoney() {
              super.makeMoney();
              System.out.println("服装公司挣大钱啦...");
          }
      }
      
    • 创建一个测试类
      package com.jin.demo.DesignPatterns.Bridge;
      
      /**
       * @auther jinsx
       * @date 2019-05-07 09:31
       */
      public class TestBridge {
      
          public static void main(String[] args) {
              System.out.println("---外套这样挣钱---");
              ClothingCorp shirt = new ClothingCorp(new Shirt());
              shirt.makeMoney();
      
              System.out.println("---内衣这样挣钱---");
              ClothingCorp jacket = new ClothingCorp(new Jacket());
              jacket.makeMoney();
          }
      }
      
    • 执行测试结果
      ---外套这样挣钱---
      生产内衣衬衫
      内衣衬衫卖出去啦...
      服装公司挣大钱啦...
      ---内衣这样挣钱---
      生产外套恰克
      外套恰克卖出去啦...
      服装公司挣大钱啦...
      
  • 点击Java之23种设计模式查看更多的设计模式

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/axing2015/article/details/90041962
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-19 02:23:46
  • 阅读 ( 1088 )
  • 分类:设计模式

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢