WWW.LOUGH.COM.CN

加入收藏 | 设为首页 | 联系站长
首页 | Java | C&C++ | 数据库 | 经验交流
论坛首页 | 综合区 | 贴图区 | 狐朋狗友 | 学习区 | 站务区
博客首页 | IT技术 | WebServices | Hibernate | Java设计模式 | Struts | AJAX | 数据库
首页 | 中华古籍 | 网络原创 | 随记

Java类库中的设计模式(七)

Java类库中的设计模式(七)

    前面说过了,在Java类库中设计模式的踪影随处可见,因而要讲解所有出现的模式
实在是不可能,这儿主要把焦点聚集在AWT/Swing中,管中窥豹,却也可以了解设计模式
的一些深刻的含义所在。
2.4 Strategy模式和布局管理器(3月14日)
    AWT/Swing中的特色之一就是布局管理器。布局管理器是Java程序中GUI的基础,相
信大家都不会陌生吧。但是布局管理器是作为Strategy模式实现的可能知道的人就不多
了(至少我初学Java的时候就不知道)。
    AWT的设计者使用布局管理器和策略模式来完成为容器布置组件的任务。容器没有布
置它们自己构件的责任,而是把这个责任授权给一个布局管理器。如果把布置构件的算
法封装在一个单独的类中,那么其它类就可以使用或者扩展其布置的功能。同时容器可
以在运行时刻使用不同的布局管理器。
    对于程序员而言,一般不需要过多的理会布局管理器的具体实现,只需要给一个容
器指定一个(或者使用缺省的)布局管理器,它会安排好每一个组件。实际上布局管理
器LayoutManager只是一个接口(抽象超类),所有实现了其中定义的方法的类都可以是
一个布局管理器,而实现方法的过程,就是封装算法的过程。
    Strategy模式是用来封装算法的。根据前面已经提到过多次的设计模式的原则,算
法的改变,应该不能引起程序的改变,Strategy模式就是用来实现这个原则的。它定义
一系列的算法,并把它们封装起来,是他们能够相互替换,使得算法能够独立于它们的
客户而变化。看看它的类图,你就会知道它是如何实现算法的封装的了:
    对象Context维持一个Strategy的引用,并调用Strategy中定义的接口来实现需要代
理的功能。而在创建Strategy的时候,通常会用到工厂方法模式来生成返回一个具体的
Strategy对象,其中封装了一种算法来实现特定的功能。通常Strategy也许要知道全部
或者部分的Context信息来完成其功能,这可以通过方法参数来传递。
    在Java的新版本中引入的授权事件模型,其实也是策略模式的应用。用起来确实要
比原有的事件模型要更为合理(虽然有些人人为原来的用的事件模型要方便一些)。或
许乍一看你可能不认为这也是策略模式,多想想就会明白了。这也是我所强调的,模式
已经写出来了,人人都知道,但是问题背景却往往被人忽略,模式的选择也是一个难点



关于我们 | 站点地图 | 免责声明 | 联系我们 | ©2003-2007 Lough.com.cn 京ICP备06060948号