设计模式学习笔记——桥接模式
发布时间:2020-12-14 02:16:12 所属栏目:百科 来源:网络整理
导读:桥接模式 桥接模式,将抽象部分与它的实现部分分离,使他们都可以独立地变化。 结构图 代码实现 抽象部分Abstraction /** * 抽象 * * @author xukai 2016年3月28日 下午11:04:11 * */public class Abstraction {protected Implementor implementor;public vo
桥接模式
桥接模式,将抽象部分与它的实现部分分离,使他们都可以独立地变化。
结构图
代码实现
抽象部分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 { @Override public void operation() { System.out.println("具体实现A的方法执行"); } } /** * 被提炼的抽象 * * @author xukai 2016年3月29日 下午11:28:45 * */ public class RefinedAbstraction extends Abstraction { @Override public 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 { @Override public void run() { soft.run(); } } /** * 游戏软件 * * @author xukai 2016年3月28日 下午11:40:21 * */ public class HandsetGame extends HandsetSoft { @Override public void run() { System.out.println("运行手机游戏"); } }通讯录: public class HandsetAddressList extends HandsetSoft { @Override public 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对象的一部分。(一只大雁和雁群)
合成是一种强的“拥有”关系,体现了严格的部分和整体的关系。(大雁翅膀和一只大雁)
*注:尽量少用继承,多用聚合/合成。
刚才手机品牌和手机软件的关系:
第一种:按照品牌分类
第二种:按照软件分类
这两种办法都会导致强耦合,一旦添加某个功能,过于复杂。
桥接模式的“将抽象部分和它的实现部分分离”,指的是实现系统可能有多角度分类,每种分类都可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |