JAVA设计模式之Template Method模式

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

 

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

 

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

 

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

 

组件图

 

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

 

 

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

 

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

 

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

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值