布局型模式2.桥接模式

打印 上一主题 下一主题

主题 1309|帖子 1309|积分 3927

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
布局型模式


  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 署理模式(Proxy Pattern)
桥接模式(Bridge Pattern)是一种布局型筹划模式,它通过将抽象部分与实在现部分分离,使得二者可以独立地变化。它紧张用于解耦抽象与实现之间的关系,允许二者独立扩展。
关键概念



  • 抽象(Abstraction):定义了抽象部分的接口,通常是客户端调用的接口。
  • 扩充抽象(Refined Abstraction):是对抽象部分的具体实现,通常是对某些方法的细化。
  • 实现(Implementor):定义了实现部分的接口,但不提供具体的实现。
  • 具体实现(Concrete Implementor):提供实现接口的具体实现。
举个例子:长途控制器

假设我们有差异类型的遥控器和装备,遥控器可以控制差异的装备。我们使用桥接模式来解耦遥控器的操作逻辑与装备的控制逻辑,使得遥控器和装备可以独立扩展。


  1. // 设备接口,定义所有设备的基本操作
  2. public interface Device {
  3.     void turnOn(); // 打开设备
  4.     void turnOff(); // 关闭设备
  5.     void setVolume(int volume); // 设置音量
  6. }
  7. // 电视机类,具体的设备实现
  8. public class TV implements Device {
  9.     private int volume;
  10.     @Override
  11.     public void turnOn() {
  12.         System.out.println("电视机打开了");
  13.     }
  14.     @Override
  15.     public void turnOff() {
  16.         System.out.println("电视机关闭了");
  17.     }
  18.     @Override
  19.     public void setVolume(int volume) {
  20.         this.volume = volume;
  21.         System.out.println("电视机音量设置为: " + volume);
  22.     }
  23. }
  24. // 收音机类,具体的设备实现
  25. public class Radio implements Device {
  26.     private int volume;
  27.     @Override
  28.     public void turnOn() {
  29.         System.out.println("收音机打开了");
  30.     }
  31.     @Override
  32.     public void turnOff() {
  33.         System.out.println("收音机关闭了");
  34.     }
  35.     @Override
  36.     public void setVolume(int volume) {
  37.         this.volume = volume;
  38.         System.out.println("收音机音量设置为: " + volume);
  39.     }
  40. }
  41. // 遥控器接口,定义遥控器的基本操作
  42. public abstract class RemoteControl {
  43.     protected Device device; // 关联一个设备
  44.     public RemoteControl(Device device) {
  45.         this.device = device;
  46.     }
  47.     public abstract void turnOn(); // 开启设备
  48.     public abstract void turnOff(); // 关闭设备
  49.     public abstract void setVolume(int volume); // 设置音量
  50. }
  51. // 基本遥控器,提供简单的开关和音量控制
  52. public class BasicRemote extends RemoteControl {
  53.     public BasicRemote(Device device) {
  54.         super(device);
  55.     }
  56.     @Override
  57.     public void turnOn() {
  58.         device.turnOn();
  59.     }
  60.     @Override
  61.     public void turnOff() {
  62.         device.turnOff();
  63.     }
  64.     @Override
  65.     public void setVolume(int volume) {
  66.         device.setVolume(volume);
  67.     }
  68. }
  69. public class Client {
  70.     public static void main(String[] args) {
  71.         // 创建设备
  72.         Device tv = new TV();
  73.         Device radio = new Radio();
  74.         // 创建遥控器并控制不同的设备
  75.         RemoteControl basicRemote = new BasicRemote(tv);
  76.         System.out.println("使用遥控器控制电视:");
  77.         basicRemote.turnOn();
  78.         basicRemote.setVolume(15);
  79.         basicRemote.turnOff();
  80.         System.out.println("\n使用遥控器控制收音机:");
  81.         basicRemote = new BasicRemote(radio);
  82.         basicRemote.turnOn();
  83.         basicRemote.setVolume(10);
  84.         basicRemote.turnOff();
  85.     }
  86. }
复制代码
解释


  • 抽象部分:RemoteControl 是抽象类,它定义了对装备的操作方法(turnOn()、turnOff()、setVolume()),但没有指定具体的装备。
  • 实现部分:Device 接口定义了全部装备应该具备的操作方法,并且由具体的装备(如 TV 和 Radio)实现这些操作。
  • 桥接:通过构造方法将装备传递给遥控器(RemoteControl),遥控器可以操作差异类型的装备,从而实现了装备和遥控器的解耦。
  • 扩展:假如以后增加新类型的装备(如空调、音响等),我们只需要创建新的 Device 实现类,而不需要修改 RemoteControl 类;同样,假如我们需要增加更复杂的遥控器功能,也可以直接在 RemoteControl 类中扩展。
优点


  • 解耦:抽象部分和实现部分解耦,可以独立变化。
  • 机动性:可以在不影响其他部分的环境下扩展系统。
  • 可维护性:修改具体的装备或遥控器时,其他部分不需要修改。
适用场景


  • 多个类的变体:当有多个类的差异变体,并且需要对这些变体进行操作时,可以使用桥接模式。
  • 避免类爆炸:当系统需要团结多个维度的变化(如差异装备和差异类型的遥控器),可以使用桥接模式避免组合类导致的类爆炸。
总结

桥接模式是一种非常强大的布局性筹划模式,可以有效地分离抽象与实现,允许独立地扩展两者,淘汰系统的复杂度。在面对多个变化维度时,桥接模式尤其有效。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表