设计模式之桥接模式
2016-08-04 15:12
246 查看
概述
在软件系统中,实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。意图
将抽象部分与实现部分分离,使它们都可以独立的变化。结构图
模仿手机安装软件的例子
新建手机和应用类
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: 天天动听
参考资料:【大话设计模式】 程杰 清华大学出版社
demo下载地址
相关文章推荐
- 设计模式 Bridge 桥接模式
- 设计模式与VB .net实现 桥接模式,单件模式
- 设计模式之Bridge(桥接)
- [导入]C#面向对象设计模式纵横谈之7.Bridge 桥接模式
- C# 设计模式 之 桥接模式
- .NET设计模式(9):桥接模式(Bridge Pattern)
- Dot Net设计模式—适配器、桥接与外观三模式之间的关系(转)
- Dot Net设计模式—适配器、桥接与外观三模式之间的关系
- 设计模式系列漫谈之十一 - 桥接模式
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- .NET设计模式(9):桥接模式(Bridge Pattern)
- 设计模式学习笔记(八)——Bridge桥接
- Dot Net设计模式—桥接模式
- .NET设计模式-桥接模式(Bridge Pattern)
- 设计模式----桥接模式
- Dot Net设计模式—适配器、桥接与外观三模式之间的关系
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
- 设计模式学习(八)桥接模式-组合模式-装饰模式
- 设计模式学习笔记(八)——Bridge桥接模式
- 设计模式之桥接(Bridge)---对象结构性模式