设计模式学习笔记——桥接模式
来源:互联网 发布:悠唐网络是真的吗 编辑:程序博客网 时间:2024/06/10 03:39
桥接模式
桥接模式,将抽象部分与它的实现部分分离,使他们都可以独立地变化。
结构图
代码实现
抽象部分Abstraction
/** * 抽象 * * @author xukai 2016年3月28日 下午11:04:11 * */public class Abstraction {protected Implementor implementor;public void setImplementor(Implementor implementor) {this.implementor = implementor;}public void operation() {implementor.operation();}}
/** * 分离的实现 * * @author xukai 2016年3月28日 下午10:47:18 * */public abstract class Implementor {public abstract void operation();}
/** * 实现抽象类的具体实现方法 * * @author xukai 2016年3月29日 下午11:24:56 * */public class ConcreteImplementorA extends Implementor {@Overridepublic void operation() {System.out.println("具体实现A的方法执行");}}
/** * 被提炼的抽象 * * @author xukai 2016年3月29日 下午11:28:45 * */public class RefinedAbstraction extends Abstraction {@Overridepublic void operation() {implementor.operation();}}
public class Client {public static void main(String[] args) {Abstraction ab = new RefinedAbstraction();ab.setImplementor(new ConcreteImplementorA());ab.operation();ab.setImplementor(new ConcreteImplementorB());ab.operation();}}控制台:
具体实现A的方法执行具体实现B的方法执行
demo
问题:手机品牌和手机软件之间的关系
结构图
代码实现
手机软件抽象类:HandsetSoft/** * 手机软件 * * @author xukai 2016年3月28日 下午11:38:47 * */public abstract class HandsetSoft {public abstract void run();}
/** * 手机品牌 * * @author xukai 2016年3月28日 下午11:42:53 * */public abstract class HandsetBrand {protected HandsetSoft soft;public void setSoft(HandsetSoft soft) {this.soft = soft;}public abstract void run();}
具体品牌:
/** * 具体品牌 * * @author xukai 2016年3月29日 下午11:36:56 * */public class HandsetBrandA extends HandsetBrand {@Overridepublic void run() {soft.run();}}
/** * 游戏软件 * * @author xukai 2016年3月28日 下午11:40:21 * */public class HandsetGame extends HandsetSoft {@Overridepublic void run() {System.out.println("运行手机游戏");}}通讯录:
public class HandsetAddressList extends HandsetSoft {@Overridepublic void run() {System.out.println("手机通讯录");}}客户端:
public class Client {public static void main(String[] args) {HandsetBrand ab;// 品牌A手机ab = new HandsetBrandA();// 添加软件ab.setSoft(new HandsetGame());ab.run();// 运行// 添加软件ab.setSoft(new HandsetAddressList());ab.run();// 运行// 品牌B手机ab = new HandsetBrandB();// 添加软件ab.setSoft(new HandsetGame());ab.run();// 运行// 添加软件ab.setSoft(new HandsetAddressList());ab.run();// 运行}}控制台:
运行手机游戏手机通讯录运行手机游戏手机通讯录
总结
合成/聚合:
聚合表示一种弱的“拥有”关系,体现A对象可以包含B对象,但是B对象不是A对象的一部分。(一只大雁和雁群)
合成是一种强的“拥有”关系,体现了严格的部分和整体的关系。(大雁翅膀和一只大雁)
*注:尽量少用继承,多用聚合/合成。
刚才手机品牌和手机软件的关系:
第一种:按照品牌分类
第二种:按照软件分类
这两种办法都会导致强耦合,一旦添加某个功能,过于复杂。
桥接模式的“将抽象部分和它的实现部分分离”,指的是实现系统可能有多角度分类,每种分类都可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
0 0
- 《设计模式》学习笔记——桥接模式
- 设计模式学习笔记——桥接模式
- 十八、桥接模式——设计模式学习笔记
- 设计模式学习笔记(四)—Bridge桥接模式
- 设计模式学习笔记—桥接模式
- 设计模式学习笔记-桥接模式
- 设计模式学习笔记-桥接模式
- 设计模式学习笔记--桥接模式
- 设计模式学习笔记--桥接模式
- 设计模式学习笔记—外观模式
- 设计模式学习笔记—观察者模式
- 设计模式学习笔记—代理模式
- 设计模式学习笔记—组合模式
- 设计模式学习笔记—命令模式
- 设计模式学习笔记—策略模式
- 设计模式学习笔记—外观模式
- 设计模式学习笔记(八)——Bridge桥接模式
- 学习笔记——JAVA设计模式<7>桥接模式
- pods安装
- python 出现错误 SyntaxError: Non-ASCII character 的解决方法
- Leetcode #27. Remove Element 移除元素 解题报告
- JavaScript Math.floor()
- poj3984迷宫问题
- 设计模式学习笔记——桥接模式
- Scanner类的使用
- Java >>> 详解
- MySQL性能分析
- 1-1-JS中的HTML属性操作
- AOJ 0118 Property Distribution(dfs 求连通块)
- 并发学习笔记(二):synchronized代码块
- 浪漫的表白 。刚接触编程语言 ,一个学长做的题。其实很简单,就是找规律输出,只是觉得输出特别浪漫,所以在此作为我人生第一个博客文章!!哈哈,大神之路 走起
- Python:使用Matplotlib绘图