模板方法模式

模板方法:定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。

 

定义模板方法模式:
    在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
    这个方法将算法定义成一组步骤,其中任何一步都可以是抽象的,由子类负责实现。

 

钩子方法:
    钩子是一种被声明在抽象类中的方法,但只有空的实现或者默认的实现。钩子的存在,可以让子类有能力对算法的不哦那个进行不同挂钩。要不要挂钩,由子类自行决定。

 

如何钩子和抽象方法:
    子类“必须”提供算法或者某个步骤的实现时,就是用抽象方法。如果某个方法是可选的,则使用钩子。
    钩子可以是可选的方法;钩子的另一个用法:是能让子类有机会对模板方法中某些即将发生的(或刚刚发生的)步骤作出反应。
   
    当写模板方法的时候,不要让算法内的步骤切割得太细,但是如果步骤太少的话,会比较没有弹性,所以要看情况折中。

    当我们设计模板方法模式时,我们用好莱坞原则告诉子类,“不要调用我们,我们会调用你”。

 

Java中的模板方法:
    实现Comparable接口,实现他的compareTo方法即可实现比较。在Array.sort中就能是是吸纳排序。

 

模板方法和策略:
a.
    模板方法的工作使用定义一个算法的大纲,而由我的子类定义其中某些步骤的内容。它在算法中的个别步骤可以有不同的实现细节,但是算法的结构依然维持不变。
    策略并不是使用继承进行算法的实现,而是通过对象组合的方式让客户可以选择算法实现。
b.
    模板方法对算法有更多的控制权,而且不会重复代码。除了极少的一部分,它的算法的每一个部分都是相同的,所以效率会略好,会重复使用到得代码,都被放进超类中,让所有子类共享。
    策略用委托模型,使用对象组合更有弹性。利用它,客户就可以在运行时改变他们的算法。

 

要点:
    1.定义了算法步骤,让步骤的实现延迟到子类。
    2.多练,多学,灵活使用钩子。
    3.为防止子类改变模板方法中的算法,可以将模板方法声明为final。
    4.策略模式和模板方法模式都封装算法,一个用组合,一个用继承。
    5.工厂方法是模板方法的一种特殊版本。

 

一个测试:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值