- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第21章 桥接模式21.1 问题的提出21.2桥接模式21.3深入理解桥接模式21.4应用示例事物功能A1=信件F1=平邮A2=包裹F2=挂号21.1问题的提出有一类事物集合,设为A1、A2、……、Am,每个事物都有功能F1、F2、……、Fn。生活中有许多类似的现象。如邮局业务,如图21-1所示。那么用计算机如何来描述这些功能呢?方法1:class A1F1{ //信件平邮}class A1F2{ //信件挂号}class A2F1{ //包裹平邮}class A2F2{ //包裹挂号} 很明显,若有m个事物,n个功能,按此方法,共要编制mXn=mn个类,很明显这是不科学的,一定是不可取的。?方法2:class A1{ void F1(){} //信件平邮 void F2(){} //信件挂号}class A2{ void F1(){} //包裹平邮 void F2(){} //包裹挂号} 很明显,若有m个事物,n个功能,按此方法,共要编制m个类。与方法1相比,编制类的数目减少了,但本质没有变,功能方法累积起来仍有mXn=mn个。很明显这同样是不科学的,也同样是不可取的。 那么,如何更好的解决图21-1所述的问题呢?桥接模式是重要的方法之一。21.2桥接模式21.1节中方法1、方法2的根本缺陷是:在具体类中都封装了F1()或F2()方法。因此,一定有许多重复的代码。解决该问题的一个重要策略仍是利用语义,进一步抽象图21-1所述功能,可描述为:邮局有发送功能;发送有两种方式,平邮和挂号;可为信件和包裹。因此,我们主要把上述关键字转译成程序代码即可,如下所示。(1)定义邮寄接口IPost。public interface IPost{ //邮局 public void post(); //发送功能}(2)两个具体邮寄类SimplePost、MarkPost。//平信邮寄类SimplePostclass SimplePost implements IPost{ //平信 public void post(){ //发送 System.out.println(This is Simple post); }}//挂号邮寄类class MarkPost implements IPost{ //挂号 public void post(){ //发送 System.out.println(This is Mark post); }}(3)抽象事物类AbstractThingabstract class AbstractThing{ //抽象事物 private IPost obj; //有抽象发送功能 public AbstractThing(IPost obj){ this.obj = obj; } public void post(){ obj.post(); }} (4)具体事物类Letter、Parcel//信件类Letterclass Letter extends AbstractThing{ public Letter(IPost obj){ super(obj); } //其它独有变量和方法}//包裹类Parcelclass Parcel extends AbstractThing{ public Parcel(IPost obj){ super(obj); } //其它独有变量和方法}现在,再编制一个简单的测试类,如下所示。public class Test { public static void main(String[] args) { IPost p = new SimplePost(); Letter letter = new Letter(p); letter.post(); }}21.3深入理解桥接模式(1)桥接模式强调“包含”代替“继承”。 日志是非常重要的一类文件,要求实现两种功能:①将信息字符串直接保存到日志中;②将加密后的字符串保存到文件中。代码如下所示。方法1:class LogFile{ //将信息直接保存到日志文件 public void save(String msg){ }}class Encrypt extends LogFile{ //加密信息保存到文件 public void save(String msg){ msg = encrypt(msg); super.save(msg); } public String encrypt(String msg){ String s = ; //s是加密后的字符串,略 return s; }}方法2:class LogFile{ //将信息直接保存到日志文件 public void save(St
文档评论(0)