设计模式实例学习-桥接模式
2015-11-18 22:06
633 查看
设计模式实例学习-桥接模式
原创博客,转载请注明出处:http://blog.csdn.net/u011035622/article/details/49913793
定义
概念定义
(行为模式)将抽象于实现解耦,使二者可以独立的变化。 我的理解:所需要实现的对象不通过直接在场景类中操作它的行为(方法),为了将它的行为状态抽象分离,因而通过抽象化角色中保存有对实现对象角色的引用,将实现对象的行为(方法)放在这抽象化角色的方法中调用。(有点绕口。。)
角色职责
抽象化角色具体抽象化角色
内部保存对实现化角色的引用,负责控制实现化角色的行为和状态。
实现化角色
具体实现化角色
实现化,顾名思义,被实现的对象,定义自身的方法属性。
实例分析
场景描述
电台需要插播广告,不同广告的广告词和广告代言人都不一样,需要根据情况调整,另外不同电台对广告的播放上也可能有不同要求。
代码讲解及分析
抽象化角色 TvBoss.javapublic abstract class TvBoss { Advertisement mAdvertisement; public void setAdvertisement(Advertisement _advertisement){ this.mAdvertisement = _advertisement; } public void reportAd(){ mAdvertisement.AdWords(); mAdvertisement.AdPerson();; } }
通过reportAd()方法来操作实现化角色的行为(方法)。
具体抽象化角色
YyTvBoss.java:YY电台公司老大
public class YyTvBoss extends TvBoss{ @Override public void reportAd() { super.reportAd(); System.out.println("YY公司,这里增添或修改对象的行为。"); } }
实现化角色 Advertisement.java
public interface Advertisement { //广告词 void AdWords(); //广告时间 void AdPerson(); }
具体实现化角色
MusicAd.java:音乐广告
public class MusicAd implements Advertisement{ @Override public void AdWords() { System.out.println("播放音乐广告词。"); } @Override public void AdPerson() { System.out.println("周杰伦代言"); } }
ColaAd.java:可乐饮料广告
public class ColaAd implements Advertisement{ @Override public void AdWords() { System.out.println("播放可乐广告词"); } @Override public void AdPerson() { System.out.println("科比代言"); } }
场景类:
package bridge; public class Main { public static void main(String[] args) { TvBoss boss = new YyTvBoss(); boss.setAdvertisement(new ColaAd()); boss.reportAd(); System.out.println("--------------------"); boss.setAdvertisement(new MusicAd()); boss.reportAd(); } }
输出:
播放可乐广告词 科比代言 YY公司,这里增添或修改对象的行为。 -------------------- 播放音乐广告词。 周杰伦代言 YY公司,这里增添或修改对象的行为。
分析:
由图中例子可以看出,通过桥接模式将Boss调用广告播放操作和广告本身分开。这样对于新进的广告,我们只需要增加一个广告类,调用者及操作行为都无需改变。
桥接模式优缺点
优点
抽象与实现分离拓展方便,减少了继承(重复用抽象化角色修饰进行拓展)。
实现化角色行为封装在抽象化角色中,客户无需了解细节。
缺点
很明显的是,父类中有的方法,子类必须也要有。对于同一个具体抽象化角色引用的具体实现化角色,不同的具体实现化角色调用相同的方法,如果增加不同类型的实现化角色,则可能需要再继承一个抽象化角色来引用它。这样的情况多了就会导致产生很多的抽象化角色。当然这也是为了替代继承————这对应的说明了桥接模式是能够很好的将公共方法和公共属性抽取,封装。应用场景
替代继承的需要(最明显的特点)重用性比较高的场景
接口或抽象类不稳定的场景(根据业务需求判断)
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树