【设计模式 - 6】之桥接模式(Bridge)


1      模式简介

举个例子,人、车和公路是三个维度,人开着车在公路上行驶,就是将这三个维度进行了关联。人分男人(Man)和女人(Woman),车分小轿车(Car)和公共汽车(Bus),公路分市区公路(Street)和高速公路(Speedway),那么如果我们不使用桥接模式的话,要模拟出所有情况,系统的架构应该是如下图所示的:


从图中可以很容易的看出,这个系统中的类太多了,需要对每种情况都进行考虑,而且如果系统中的维数一多,类中的类就会爆炸。为了解决这个问题,一种解决思路就是使用桥接模式。

 

桥接模式定义:将抽象部分与实现部分分离,让它们都可以独立的变化。

 

桥接模式的适用情况:

当系统中的维数过多,类的个数随着维数的增多会急剧增加时。

 

桥接模式的优点:

1)        实现了抽象和实现的分离;

2)        有很好的扩展能力;

3)        将不同维度放在同一个平面上;

4)        实现细节对用户透明。

 

桥接模式的缺点:

不同维度的关联关系都被放在了抽象层,加大了系统设计的难度。

 

上面例子,经过桥接模式处理之后的UML图如下所示:


2      代码

2.1    需求

和上面的例子相似,只不过我们换一个例子:

一个系统中有三个维度,人(Person)包括男人(Man)和女人(Woman);画笔(Drawer)包括铅笔(Pencil)和钢笔(Pen);图形(Shape)包括圆形(Circle)和矩形(Rectangle)。搭建项目框架,使得最终的输出格式如“男人用铅笔画了一个圆形”的格式。

 

2.2    分析

这个项目的UML图如下图所示:


 

2.3    代码

Shape父类中的代码:

public abstract class Shape {
      abstract void introduce();
}
Shape的一个子类Circle类中的代码:

public class Circle extends Shape {
      @Override
      void introduce() {
           System.out.print("圆形");
      }
}
Drawer父类中的代码:

public abstract class Drawer {
      public Shape shape;
 
      abstract void drawShape();
}
Drawer类的一个子类Pencil类中的代码:

public class Pencil extends Drawer {
      @Override
      void drawShape() {
           System.out.print("用铅笔画了一个");
           super.shape.introduce();
      }
}
Person类中的代码:

public abstract class Person {
      public Drawer drawer;
 
      abstract void draw();
}
Person的一个子类Man类中的代码:

public class Man extends Person {
      @Override
      void draw() {
           System.out.print("男人");
           super.drawer.drawShape();
      }
}

2.4    测试

测试类中的代码:

public class Test {
      public static void main(String[] args) {
           Shapecircle = new Circle();
 
           Drawerpencil = new Pencil();
           pencil.shape = circle;
 
           Personman = new Man();
           man.drawer = pencil;
 
           man.draw();
           System.out.println();
      }
}
测试结果如下图所示:



最后贴出桥接模式的GitHub代码:【GitHub - Bridge】


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23种设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发型模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值