广告招商,网站快速排名优化方法,dota2海涛做的网站,公司起名在线生成器设计模式--结构型--桥接模式 桥接#xff08;Bridge#xff09;模式定义结构案例好处使用场景 桥接#xff08;Bridge#xff09;模式
定义
将抽象与实现分离#xff0c;使他们可以独立变化。它是用组合关系代替继承关系来实现#xff0c;从而降低了抽象和实现这两个维… 设计模式--结构型--桥接模式 桥接Bridge模式定义结构案例好处使用场景 桥接Bridge模式
定义
将抽象与实现分离使他们可以独立变化。它是用组合关系代替继承关系来实现从而降低了抽象和实现这两个维度的耦合度。
结构
抽象化Abstraction角色定义抽象类并包含一个对实现化对象的引用扩展抽象化Refined Abstraction角色是抽象化角色的子类实现父类中的业务方法并通过组合关系调用实现化角色中的业务方法。实现化Implementor角色定义实现化角色的接口供扩展抽象化角色调用。具体实现化Concrete Implementor角色给出实现化角色接口的具体实现。
案例
需要开发一个跨平台视频播放器可以在不同操作系统平台windowsmac linux等上播放多种格式rmvbaviwmv等的视频文件该播放器包含了两个维度可以使用桥接模式 类图
/*** 视频文件 实现化角色*/
public interface VideoFile {// 解码方法void decode(String fileName);
}/*** avi 视频文件 具体的实现化角色*/
public class AviFile implements VideoFile{//Overridepublic void decode(String fileName) {System.out.println(avi视频文件 fileName);}
}/*** Rmvb视频文件 具体的实现化角色*/
public class RmvbFile implements VideoFile {Overridepublic void decode(String fileName) {System.out.println(rmvb视频文件 fileName);}
}/*** 抽象的操作系统类 抽象化角色*/
public abstract class OpratingSystem {// 声明videoFile角色protected VideoFile videoFile;public OpratingSystem(VideoFile videoFile) {this.videoFile videoFile;}public abstract void play(String fileName);
}/*** 扩展抽象化角色 Windows操作系统*/
public class Windows extends OpratingSystem{public Windows(VideoFile videoFile) {super(videoFile);}Overridepublic void play(String fileName) {videoFile.decode(fileName);}
}public class Mac extends OpratingSystem{public Mac(VideoFile videoFile) {super(videoFile);}Overridepublic void play(String fileName) {videoFile.decode(fileName);}
}public class Test01 {public static void main(String[] args) {// 创建mac系统对象OpratingSystem system new Mac(new AviFile());// 使用操作系统播放视频文件system.play(西游记);OpratingSystem system1 new Windows(new RmvbFile());system1.play(三国演义);}
}好处
桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度都不需要修改原有系统。细节对客户透明
使用场景
当一个类存在两个独立变化的维度且这两个维度都需要进行扩展时。当一个系统不希望使用继承或因为多层继承导致系统类的个数急剧增加时。当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活型时。避免在两个层次之间建立静态的继承关系通过桥接模式可以使他们在抽象层面建立联系