HardBirch

JAVA设计模式之Template Method模式

时间:11-05-05 栏目:安卓学习笔记 作者:张飞不张,文采横飞 评论:0 点击: 1,461 次

现在让你设计一个类,这个类含有一个特定的功能,但是该功能中的某些操作的具体逻辑现在无法确定下来,因为不同的情况下,可能要求改变这些具体的操作。那么我们如何来设计呢???

 

比如现在有一个算法Algorithm,它含有四个步骤(原子操作),分别是step1,step2,step3,step4。现在让你设计一个类来封装它,你该如何设计呢???

 

你可能会想到,当我们在具体使用它的时候,直接以方法实现在需要的类中就可以了。但是,注意到,我们说过,算法的步骤(骨架)是确定的。所以,每次使用的时候,就意味着你都做了大量重复性的劳动。

 

哈哈,其实很容易想到了,我们可以抽取那些可变的操作作为单独的方法,然后在那个不变的算法逻辑中调用,抽取出来的方法先不实现,留给子类来实现。这就是模板方法的设计模式了,很简单对吗,因为他就涉及到一个继承关系。如下图:

 

组件图

 

其中Template是一个抽象类,他的algorithm的实现逻辑如下:

 

 

其中,step1~step4就是预定义好的一系列抽象的原子操作,子类必须要实现这些方法。注意到,为了保证子类在扩展父类的时候,破坏业务逻辑,因为子类可以通过重写父类的algorithm方法来改变其逻辑,我们可以将algorithm的方法设置为final类型的,这样子类就无法重写父类中的algorithm方法了。

 

模板方法设计模式,是符合开闭原则的,开闭原则就是指一个软件实体应该对扩展开发,而对修改关闭!显然,模板方法的设计思想是符合开闭原则的。

 

同时,父类中的原子操作,事由子类实现的,而对其他的类应该是不可见的。所以,step1~step4应该定义为protected的,这些方法只是为algorithm服务的,而不是暴露给别的类来调用的,别的类关心的只是algorithm方法。

 

 

 

声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: JAVA设计模式之Template Method模式

JAVA设计模式之Template Method模式:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐