桥接模式更注重:两个可变维度的拓展 不能用继承 容易造成类爆炸
四个角色:实现化 (定义接口方法 ) 具体实现化 implement实现化接口 并重写方法
抽象化 :聚合实现化接口 并初始化 重写方法 调用方法(接口对象 调用 指向实现类->多态)
拓展抽象化 :实现抽象化 重写方法 调用方法( 实现化接口对象 调用的还是初始 拓展抽象化对象实例的时候传递的 具体实现化 对象)
package com.qf.bridgedemo;
//实现化角色
public interface VideoFile {
//定义实现化角色的接口,供扩展抽象化角色调用
void decode(String fileName);
}
package com.qf.bridgedemo;
//avi文件
public class AVIFile implements VideoFile {
@Override
public void decode(String fileName) {
System.out.println("avi 文件 " + fileName);
}
}
package com.qf.bridgedemo;
//rmvb文件
public class RMVBFile implements VideoFile {
@Override
public void decode(String fileName) {
System.out.println("rmvb文件" + fileName);
}
}
package com.qf.bridgedemo;
//操作系统版本 抽象化角色
public abstract class OperatingSystemVersion {
//聚合 对是实现化的引用
protected VideoFile videoFile;
public OperatingSystemVersion(VideoFile videoFile) {
this.videoFile = videoFile;
}
//抽象化角色 中的方法
public abstract void play(String fileName);
}
package com.qf.bridgedemo;
//window版本 拓展抽象化角色
public class Windows extends OperatingSystemVersion {
//初始化的时候构件实现化类对象
public Windows(VideoFile videoFile) {
super(videoFile);
}
//重写 抽象化方法
@Override
public void play(String fileName) {
videoFile.decode(fileName);
}
}
package com.qf.bridgedemo;
//拓展抽象化角色
public class Mac extends OperatingSystemVersion {
public Mac(VideoFile videoFile) {
super(videoFile);
}
@Override
public void play(String fileName) {
videoFile.decode(fileName);
}
}
总结:两个独立变化的维度 拓展的时候 推荐使用桥接模式