桥接模式
来源:互联网 发布:java服务器与web服务器 编辑:程序博客网 时间:2024/05/18 00:34
先介绍合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。
聚合:一种弱的拥有关系,体现A对象可以包含B对象,B对象不是A对象的一部分合成:一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。优先使用对象的合成/聚合,而不是继承。继承是一种请耦合结构,父类变,子类就必须变。合成/聚合是松耦合结构,有助于将每个类都封装起来,减小类和继承层次规模。
桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立变化。
抽象与实现分离的意思是抽象类和派生类用来实现自己的对象。
即实现系统可能有对角度分析,每一种分类都可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。
比如我们有各种品牌的手机,手机上装了各种软件。如果我们以手机为抽象类,派生出各种具体品牌手机,再派生出对应的各种软件。如果我们要添加个软件,就得去各品牌手机类下添加。如果要添加个手机品牌,那么不但要去手机抽象类下新派生一个,还要派生出各种软件类。可以看出,派生这种方法耦合度非常高,不易修改。
但是如果我们将各个类封装,由于手机品牌包含软件,但软件不是品牌手机一部分,所以它们是聚合关系。将手机和软件独立出来。这样如果要修改品牌或者软件,都不会影响其它类,具体操作时再将它们聚合在一起。
软件抽象:
public abstract class HandSetSoft { public abstract void run();}
具体软件:
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 abstract class HandSetBrand { protected HandSetSoft soft; public void setHandSetSoft(HandSetSoft soft) { this.soft = soft; } public abstract void run();}
具体品牌:
public class HandSetBrandM extends HandSetBrand { @Override public void run() { System.out.print("M牌手机:"); soft.run(); }}
public class HandSetBrandN extends HandSetBrand { @Override public void run() { System.out.print("N牌手机:"); soft.run(); }}
主程序:
HandSetBrand handSetBrand;handSetBrand = new HandSetBrandN();handSetBrand.setHandSetSoft(new HandSetGame());handSetBrand.run();handSetBrand.setHandSetSoft(new HandSetAddressList());handSetBrand.run();handSetBrand = new HandSetBrandM();handSetBrand.setHandSetSoft(new HandSetGame());handSetBrand.run();handSetBrand.setHandSetSoft(new HandSetAddressList());handSetBrand.run();
修改手机品牌和软件时只需要修改对相应类,不会对其它类造成影响,符合开闭原则。
0 0
- 设计模式:适配器模式,桥接模式
- 设计模式----桥接模式
- 设计模式---桥接模式
- 结构性模式-桥接模式
- 设计模式:桥接模式
- 设计模式 桥接模式
- 设计模式 - 桥接模式
- 设计模式--桥接模式
- 设计模式--桥接模式
- 设计模式 - 桥接模式
- 设计模式-桥接模式
- 设计模式 - 桥接模式
- 设计模式 - 桥接模式
- 【设计模式-桥接模式】
- 设计模式:桥接模式
- 【设计模式】----桥接模式
- 【设计模式】桥接模式
- 设计模式--桥接模式
- Android facebook集成
- CS0165号错误是什么
- 如何快速转载其他人CSDN博客
- openstack 和cloudstack之间的比较
- 压力测试工具JMeter入门教程
- 桥接模式
- 百忙之中也要乐于家装
- Android编程之动态壁纸实例分析
- 代码自动生成(二)数据库表字段生成mybaties 映射配置文件**mapper.xml
- 纪念
- Android MultiDex分包变形记
- JSP基础语法
- 自定义Toast
- 《用python写网络爬虫》笔记2