自己的网站做防伪码,深圳软件开发公司招聘,包装设计网上接单,广告传媒网站模板桥接模式 介绍 桥接模式是一种结构型设计模式#xff0c;它通过将抽象部分与实现部分分离#xff0c;使它们可以独立变化。这种模式通过组合的方式来实现#xff0c;而不是继承。桥接模式通过将抽象和实现解耦#xff0c;从而实现抽象和实现的分离#xff0c;使得系统更加…桥接模式 介绍 桥接模式是一种结构型设计模式它通过将抽象部分与实现部分分离使它们可以独立变化。这种模式通过组合的方式来实现而不是继承。桥接模式通过将抽象和实现解耦从而实现抽象和实现的分离使得系统更加灵活。 角色 Abstraction抽象类 定义抽象类包含一个对实现接口的引用并定义一些抽象方法。 RefinedAbstraction扩充抽象类 对抽象类进行扩充可以继承抽象类并实现抽象方法。 Implementor实现类接口 定义实现类的接口可以包含一些基本的操作。 ConcreteImplementor具体实现类 实现Implementor接口的具体实现类。 使用场景 当我们要实现的系统可能存在多角度分类每一种分类都有可能变化那么就把这种多角度分离出来让它们独立变化减少它们之间的耦合。 结构图 案例 假设我们要设计一个远程控制器它可以控制不同的设备比如电视和音响。使用桥接模式可以使控制器和设备之间的关系更加灵活。 代码 // Implementor实现类接口
interface Device {void turnOn();void turnOff();void setChannel(int channel);
}// ConcreteImplementor具体实现类1
class TV implements Device {Overridepublic void turnOn() {System.out.println(TV is turned on);}Overridepublic void turnOff() {System.out.println(TV is turned off);}Overridepublic void setChannel(int channel) {System.out.println(TV channel set to channel);}
}// ConcreteImplementor具体实现类2
class Stereo implements Device {Overridepublic void turnOn() {System.out.println(Stereo is turned on);}Overridepublic void turnOff() {System.out.println(Stereo is turned off);}Overridepublic void setChannel(int channel) {System.out.println(Stereo channel set to channel);}
}// Abstraction抽象类
abstract class RemoteControl {protected Device device;public RemoteControl(Device device) {this.device device;}public abstract void turnOn();public abstract void turnOff();public abstract void setChannel(int channel);
}// RefinedAbstraction扩充抽象类
class BasicRemoteControl extends RemoteControl {public BasicRemoteControl(Device device) {super(device);}Overridepublic void turnOn() {System.out.print(Basic remote: );device.turnOn();}Overridepublic void turnOff() {System.out.print(Basic remote: );device.turnOff();}Overridepublic void setChannel(int channel) {System.out.print(Basic remote: );device.setChannel(channel);}
}// RefinedAbstraction扩充抽象类
class AdvancedRemoteControl extends RemoteControl {public AdvancedRemoteControl(Device device) {super(device);}Overridepublic void turnOn() {System.out.print(Advanced remote: );device.turnOn();}Overridepublic void turnOff() {System.out.print(Advanced remote: );device.turnOff();}Overridepublic void setChannel(int channel) {System.out.print(Advanced remote: );device.setChannel(channel);}public void mute() {System.out.println(Mute);}
}// Client客户端
public class BridgePatternExample {public static void main(String[] args) {// 使用桥接模式创建远程控制器和设备的组合TV tv new TV();Stereo stereo new Stereo();RemoteControl basicRemote new BasicRemoteControl(tv);RemoteControl advancedRemote new AdvancedRemoteControl(stereo);// 使用远程控制器控制设备basicRemote.turnOn();basicRemote.setChannel(5);basicRemote.turnOff();System.out.println();advancedRemote.turnOn();advancedRemote.setChannel(10);advancedRemote.turnOff();((AdvancedRemoteControl) advancedRemote).mute();}
}