模板类模式

如果希望父类中的方法不能被子类所覆盖,用final关键字

对于若干个方法,取出相同的子方法,将不同的子方法进行泛化,封装在新的模板类(是个抽象类)中,不同的子方法规定为abstarct的,在子类中去实现它。

还可以在模板类中加入一个hook(钩子),这个方法可以作为条件控制,影响抽象类的算法流程,如决定是否要执行加入调料的步骤,可以征求客户的请求。即当步骤方法是可选的时候,用钩子。在java中,JFrame中的paint()方法就是一个钩子,再比如,Applet中的很多方法都是钩子。钩子是一个方法,他在抽象内中不做事情或者说只做默认的事情,子类可以选择要不要覆盖他。

算法模板:比如说对鸭子数组进行排序(按重量),调用Array的静态方法sort()方法,此sort()方法中的鸭子之间的比较函数CompareTo()必须由鸭子类自定义决定(自行提供比较大小的算法部分),具体是Duck类实现Comparable接口,实现该接口中的方法CompareTo()。——————这个在java中比较普遍,如InputStream类中的read()方法。用了下,感觉好强大。

设计模式在书中很简单,很明了,但是来到荒野中,不要期望一眼就能够认出他们,尽管他们很普遍。

猜你喜欢

转载自be-q.iteye.com/blog/2128272