布局型模式2.桥接模式
布局型模式[*]适配器模式(Adapter Pattern)
[*]桥接模式(Bridge Pattern)
[*]组合模式(Composite Pattern)
[*]装饰器模式(Decorator Pattern)
[*]外观模式(Facade Pattern)
[*]享元模式(Flyweight Pattern)
[*]署理模式(Proxy Pattern)
桥接模式(Bridge Pattern)是一种布局型筹划模式,它通过将抽象部分与实在现部分分离,使得二者可以独立地变化。它紧张用于解耦抽象与实现之间的关系,允许二者独立扩展。
关键概念
[*]抽象(Abstraction):定义了抽象部分的接口,通常是客户端调用的接口。
[*]扩充抽象(Refined Abstraction):是对抽象部分的具体实现,通常是对某些方法的细化。
[*]实现(Implementor):定义了实现部分的接口,但不提供具体的实现。
[*]具体实现(Concrete Implementor):提供实现接口的具体实现。
举个例子:长途控制器
假设我们有差异类型的遥控器和装备,遥控器可以控制差异的装备。我们使用桥接模式来解耦遥控器的操作逻辑与装备的控制逻辑,使得遥控器和装备可以独立扩展。
// 设备接口,定义所有设备的基本操作
public interface Device {
void turnOn(); // 打开设备
void turnOff(); // 关闭设备
void setVolume(int volume); // 设置音量
}
// 电视机类,具体的设备实现
public class TV implements Device {
private int volume;
@Override
public void turnOn() {
System.out.println("电视机打开了");
}
@Override
public void turnOff() {
System.out.println("电视机关闭了");
}
@Override
public void setVolume(int volume) {
this.volume = volume;
System.out.println("电视机音量设置为: " + volume);
}
}
// 收音机类,具体的设备实现
public class Radio implements Device {
private int volume;
@Override
public void turnOn() {
System.out.println("收音机打开了");
}
@Override
public void turnOff() {
System.out.println("收音机关闭了");
}
@Override
public void setVolume(int volume) {
this.volume = volume;
System.out.println("收音机音量设置为: " + volume);
}
}
// 遥控器接口,定义遥控器的基本操作
public abstract class RemoteControl {
protected Device device; // 关联一个设备
public RemoteControl(Device device) {
this.device = device;
}
public abstract void turnOn(); // 开启设备
public abstract void turnOff(); // 关闭设备
public abstract void setVolume(int volume); // 设置音量
}
// 基本遥控器,提供简单的开关和音量控制
public class BasicRemote extends RemoteControl {
public BasicRemote(Device device) {
super(device);
}
@Override
public void turnOn() {
device.turnOn();
}
@Override
public void turnOff() {
device.turnOff();
}
@Override
public void setVolume(int volume) {
device.setVolume(volume);
}
}
public class Client {
public static void main(String[] args) {
// 创建设备
Device tv = new TV();
Device radio = new Radio();
// 创建遥控器并控制不同的设备
RemoteControl basicRemote = new BasicRemote(tv);
System.out.println("使用遥控器控制电视:");
basicRemote.turnOn();
basicRemote.setVolume(15);
basicRemote.turnOff();
System.out.println("\n使用遥控器控制收音机:");
basicRemote = new BasicRemote(radio);
basicRemote.turnOn();
basicRemote.setVolume(10);
basicRemote.turnOff();
}
}
解释
[*] 抽象部分:RemoteControl 是抽象类,它定义了对装备的操作方法(turnOn()、turnOff()、setVolume()),但没有指定具体的装备。
[*] 实现部分:Device 接口定义了全部装备应该具备的操作方法,并且由具体的装备(如 TV 和 Radio)实现这些操作。
[*] 桥接:通过构造方法将装备传递给遥控器(RemoteControl),遥控器可以操作差异类型的装备,从而实现了装备和遥控器的解耦。
[*] 扩展:假如以后增加新类型的装备(如空调、音响等),我们只需要创建新的 Device 实现类,而不需要修改 RemoteControl 类;同样,假如我们需要增加更复杂的遥控器功能,也可以直接在 RemoteControl 类中扩展。
优点
[*]解耦:抽象部分和实现部分解耦,可以独立变化。
[*]机动性:可以在不影响其他部分的环境下扩展系统。
[*]可维护性:修改具体的装备或遥控器时,其他部分不需要修改。
适用场景
[*]多个类的变体:当有多个类的差异变体,并且需要对这些变体进行操作时,可以使用桥接模式。
[*]避免类爆炸:当系统需要团结多个维度的变化(如差异装备和差异类型的遥控器),可以使用桥接模式避免组合类导致的类爆炸。
总结
桥接模式是一种非常强大的布局性筹划模式,可以有效地分离抽象与实现,允许独立地扩展两者,淘汰系统的复杂度。在面对多个变化维度时,桥接模式尤其有效。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]