概述
在软件系统中,实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。
意图
将抽象部分与实现部分分离,使它们都可以独立的变化。
结构图

模仿手机安装软件的例子
新建手机和应用类
public abstract class Phone {
protected String name;
protected Application app;
public Phone(String name) {
this.name = name;
}
public void installApp(Application app) {
System.out.println(name + ": " + app.name + " is installing");
this.app = app;
}
public abstract void run();
}
public abstract class Application {
protected String name;
public Application(String name) {
this.name = name;
}
public abstract void run();
}
手机具体实现类
public class Android extends Phone {
public Android(String name) {
super(name);
}
@Override
public void run() {
System.out.print(name + ": ");
app.run();
}
}
public class Apple extends Phone {
public Apple(String name) {
super(name);
}
@Override
public void run() {
System.out.print(name + ": ");
app.run();
}
}
应用具体实现类
public class AddressList extends Application {
public AddressList(String name) {
super(name);
}
@Override
public void run() {
System.out.println("running app: " + name);
}
}
public class Camera extends Application {
public Camera(String name) {
super(name);
}
@Override
public void run() {
System.out.println("running app: " + name);
}
}
客户端实现代码
public class Client {
public static void main(String[] args) {
Phone phone = new Android("小米5");
phone.installApp(new AddressList("通讯录"));
phone.run();
System.out.println();
phone.installApp(new Camera("相机"));
phone.run();
System.out.println();
phone = new Apple("iPhone 6s");
phone.installApp(new AddressList("通讯录"));
phone.run();
System.out.println();
phone.installApp(new Camera("相机"));
phone.run();
System.out.println();
}
}
运行结果
小米5: 通讯录 is installing
小米5: running app: 通讯录
小米5: 相机 is installing
小米5: running app: 相机
iPhone 6s: 通讯录 is installing
iPhone 6s: running app: 通讯录
iPhone 6s: 相机 is installing
iPhone 6s: running app: 相机
扩展程序:新增应用
只需增加一个实现类
public class MusicPlayer extends Application {
public MusicPlayer(String name) {
super(name);
}
@Override
public void run() {
System.out.println("running app: " + name);
}
}
修改客户端代码:
phone.installApp(new MusicPlayer("网易云音乐"));
phone.run();
System.out.println();
phone.installApp(new MusicPlayer("天天动听"));
phone.run();
System.out.println();
运行结果
iPhone 6s: 网易云音乐 is installing
iPhone 6s: running app: 网易云音乐
iPhone 6s: 天天动听 is installing
iPhone 6s: running app: 天天动听
参考资料:【大话设计模式】 程杰 清华大学出版社
本文通过一个手机安装软件的例子,详细介绍了桥接模式的设计思想及其实现方式。通过将抽象部分与实现部分分离,使得两者可以独立变化,降低了系统的耦合度。
2064

被折叠的 条评论
为什么被折叠?



