- 桥接模式:用于系统的初步设计,对于存在两个独立变化维度的类可以将其分为抽象化和实现化两个角色,使它们可以分别进行扩展变化。
- (适配器模式:当发现系统与已有类无法协同工作时)
类图:
代码示例:
1.Video接口
public interface Video {
/**
* 打开视频文件
* @return 视频文件
*/
Video openVideo();
/**
* 播放视频
*/
void playVideo();
}
2.Video实现-FlvVideo
public class FlvVideo implements Video {
@Override
public Video openVideo() {
System.out.println("打开Flv格式视频");
return new FlvVideo();
}
@Override
public void playVideo() {
System.out.println("当前视频格式是Flv");
}
}
3.Video实现-Mp4Video
public class Mp4Video implements Video {
@Override
public Video openVideo() {
System.out.println("打开Mp4格式视频");
return new Mp4Video();
}
@Override
public void playVideo() {
System.out.println("当前视频格式是Mp4");
}
}
4.操作系统抽象类-Os,桥接模式的核心
public abstract class Os {
protected Video video;
public Os(Video video) {
this.video = video;
}
/**
* 该方法与Video接口中的方法名相同,但非强制
*
* @return video
*/
abstract Video getVideo();
}
5.操作系统子类-AndroidOs
public class AndroidOs extends Os {
public AndroidOs(Video video) {
super(video);
}
@Override
Video getVideo() {
return video;
}
}
6.操作系统子类-LinuxOs
public class LinuxOs extends Os {
public LinuxOs(Video video) {
super(video);
}
@Override
Video getVideo() {
return video;
}
}
6.测试代码
public static void main(String[] args) {
// 在安卓系统上播放flv
LinuxOs linuxOs = new LinuxOs(new FlvVideo());
Video flv = linuxOs.getVideo();
flv.playVideo();
// 在linux系统上播放MP4
AndroidOs androidOs = new AndroidOs(new Mp4Video());
Video mp4 = androidOs.getVideo();
mp4.playVideo();
}