离弦之Ray

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  55 Posts :: 0 Stories :: 33 Comments :: 0 Trackbacks
 

Template method pattern

从这个模式的名字就可以知道个大概,Template说明这个模式有一个模版,子类都要按照父类列出的大纲来干活。在这个模式中,父类通常是abstract的。为什么不用接口?因为对某些所有子类都要用到的方法,父类中就给出了代码,而接口中是不能有具体实现代码的。

父类中有一个总的方法就是所谓的template method,这个方法通常被声明为final,这样子类就无法override它,保证了它的权威性。这个template method调用其它方法,这些“其它方法”包括了三个类型:

第一种,是abstract类型,子类需要根据自己的情况实现这部分代码;

第二种,是final型的,这种方法父类把它写死了,子类必须遵守;

第三种,就是普通方法,是optional,子类可以延用父类的方法,也可以override掉它,写自己的代码,这种optional的方法给它一个名字叫做hook

这个父类通常是这种形势。

abstract class AbstractClass{

  final void templateMethod(){

      a();

      b();

      c();

      …

}

    abstract void a();

    final void b(){}

    void c(){}

}

应该说这个模式既蕴含着权威性和自由性。

Iterator and Composite Patterns

       这个模式的研究对象是Collection,包括ArrayListArray甚至还有Hashmap等等一切java里面的集合对象。Iterator的理念是把集合对象中的遍历等功能独立抽取出来,实现一个Iterator的接口,主要实现next()hasNext()两个方法,这些东西和数据结构里面的东西基本一样。

而以此为基础的Composite Pattern其实就是数据结构里面树的概念,所以这里的东西还是找本数据结构书看看更好。

The State Pattern

       初看这个模式,发现里面有一个类似UML中状态图的东西,如其名字,这个模式主要描述如何处理应用中出现的“状态”。

       解决方式是这样的:

.      第一步,创建一个叫做State的接口,里面包含什么东西呢?记得UML状态图中发生状态转换时箭头上面那些改变的条件?把这些条件全部转化为方法,表示当这个条件发生时,状态该怎么变。

       第二步,每个具体的concreteState都要实现都要实现State这个接口。怎么实现?当然,state不是独立出现的,总有一个把它作为参数的类,里面有个私有变量保存当前的状态,暂且就把它称作currentState吧。接口中定义的方法,在concreteState中这样实现:每个方法根据条件定义,将currentState改成相应的状态。

       以上其实就是State Pattern的精髓。

posted on 2007-09-22 13:51 离弦之ray的技术天空 阅读(207) 评论(0)  编辑  收藏 所属分类: Design Pattern

只有注册用户登录后才能发表评论。


网站导航: