设计模式之桥接模式
来源:互联网 发布:python idle无法打开 编辑:程序博客网 时间:2024/05/24 06:52
概述
在软件系统中,实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的耦合。
意图
将抽象部分与实现部分分离,使它们都可以独立的变化。
结构图
模仿手机安装软件的例子
新建手机和应用类
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 installingiPhone 6s: running app: 通讯录iPhone 6s: 相机 is installingiPhone 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 installingiPhone 6s: running app: 网易云音乐iPhone 6s: 天天动听 is installingiPhone 6s: running app: 天天动听
参考资料:【大话设计模式】 程杰 清华大学出版社
demo下载地址
0 0
- 设计模式之桥接模式
- C# 设计模式 之 桥接模式
- c#设计模式之[桥接模式]
- 设计模式之桥接模式
- 设计模式之-Bridge-- 桥接模式
- 设计模式之桥接模式
- 设计模式之桥接模式
- 设计模式之Bridge(桥接模式)
- 设计模式之桥接模式
- 设计模式之Bridge(桥接模式)
- 设计模式之桥接模式BridgePattern
- C# 设计模式之桥接模式
- 设计模式之桥接模式
- 设计模式之桥接模式
- Java 设计模式 之 桥接模式
- Java 设计模式 之 桥接模式
- Java 设计模式 之 桥接模式
- 设计模式之桥接模式
- C#入门5.6——迭代语句之for语句
- 关于斜率优化DP
- Windows64 bit 环境下安装配置Redis
- STL中set用法详解
- mysql数据库中的索引
- 设计模式之桥接模式
- CF 702C Cellular Network
- 五大常用算法:分治、动态规划、贪心、回溯和分支界定
- Spring与Hibernate结合使用
- Day1 Markdown for My CSDN blog
- Android开发02_四种常用监听
- leetcode 7 --- Reverse Integer
- mysql 主从复制配置
- 从ui框架到view的事件分发