GoF几种设计模式举例及其应用

GoF几种设计模式举例及其应用

ID:40553921

大小:77.50 KB

页数:7页

时间:2019-08-04

GoF几种设计模式举例及其应用_第1页
GoF几种设计模式举例及其应用_第2页
GoF几种设计模式举例及其应用_第3页
GoF几种设计模式举例及其应用_第4页
GoF几种设计模式举例及其应用_第5页
资源描述:

《GoF几种设计模式举例及其应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、GoF几种设计模式举例及其应用1090379131易余GOF即GangofFour,就Java语言体系来说,GOF的设计模式是Java基础知识和J2EE框架知识之间一座隐性的"桥"。实际上,GoF的设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,GoF的设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。本文介绍几种常用的设计模式的举例和应用。适配器(A

2、dapter)如何解决不相容的接口问题,或者如何为具有不同接口的类似构件提供稳定的接口?这样的问题的解决方案就是通过中介适配器对象,将构件的原有接口转换为其他接口。应用举例:POS系统需要支持多种第三方外部服务,其中包括税金计算器,信用卡授权服务,库存系统和账务系统。这些外部服务都具有不同的API,并且无法改变。这样的问题解决方案就是:增加一层间接性对象,通过这些间接对象将不同的外部接口调整为在应用程序内使用的一致接口。如上图所示,对于选定的外部服务,将选用一个特定的适配器实例来表示。例如针对账务系统

3、的SAP,当向外部接口发出postSale请求时,首先通过适配器进行转换,使其能够通过HTTP上的SOAPXML接口来访问在SAP在局域网上提供的WebService。单实例类(Singleton)工厂设计模式也称为简单工厂,经常描述为抽象工厂的变种。工厂设计模式引发出另一个新的问题,即谁来创建工厂自身和如何访问工厂。代码在不同的位置都需要访问适配器以调用外部服务,所以就需要代码在不同的位置调用工厂中的方法。在这里就存在可见性的问题,即如何获得单个工厂实例的可见性以及单点访问。解决方案:对类定义静态方

4、法返回单实例。其中的关键思想是,对类定义静态方法getInstance,该方法提供了类的唯一实例。例如:publicclassRegister{publicvoidInitialize{…dosomework…AccountingAdapter=ServicesFactory.getInstance().getAccountingAdapter();…dosomework…}}由于公共类的可见性是全局的,因此代码的任何一点,在类的任何方法中,都可以写为:SingletonClass.getInstan

5、ce()例如SingletonClass.getInstance().doFoo(),这种写法就是为了获得对于单实例类的实例可见性,并且对其发送消息。单实例类还存在另一个问题,为什么不将所有服务的方法都定义成类自己的静态方法,而是使用有实例方法的实例对象?原因如下:实例方法允许定义单实例类的子类以对其进行精化。静态的方法不是多态的,而且大多数语言中不允许在子类中对其覆写。大多数面向对象的远程通信机制只支持实例方法的远程使用而不支持静态方法。类并非在所有的场景中都是单实例类。在一个应用中是单实例的,而在

6、另一个实例中却可能是多实例的,并且在开始设计的时候考虑使用单实例的不多见。因此使用实例方法的解决方案有更大的灵活性。观察者模式(Observer)观察者模式支持低耦合,它允许现有视图或者表示层使用新的窗口来代替特定的窗口,同时不会对非UI对象产生影响。例如,如果模型对象不知道JavaSwing对象,那么久可以拔掉Swing接口或者特定的窗口,然后插入其他的东西。不同类型的观察者关注观察对象的状态变化或事件,并且在观察对象产生事件时以自己独特的方式的做出反应。观察对象与观察者保持低耦合,就使用观察者设计

7、模式。解决方案为:定义观察者接口,观察者实现此接口。对象可以动态关注某事件的观察者,并在事件发生时通知他们。下图描述了此类解决方案。此例的主要思想和步骤是:定义接口。在本例中式具有onPropertyEvent操作的PropertyListener。定义实现该接口的窗口。SaleFrame1实现onPropertyEvent方法。在SaleFrame1窗口初始化时,向其传递Sale实例以显示总额。SaleFrame1窗口通过addPropertyListener消息向Sale实例注册或者订阅特性事件的

8、通知。也就是说总额变化时,该窗口会得到通知。Sale并不知道SaleFrame1对象,它只知道实现了PropertyListener对象。这样就降低了Sale和窗口的耦合。Sale实例就成为了特性事件的发布者,当总额发生变化时,它会遍历所有订阅了的PropertyListener,并且通知每一个订阅者。SaleFrame1就是观察者组合(Composite)商场有不同的定价策略,一般商店在解决冲突策略时会应用“对顾客最有利”的策略来解决冲突。但有时在财政

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。