这里数据的保存就是根据使用的时候设置的策略来决定。
使用策略模式可以避免使用多重条件(if-else)语句。多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观。
15、模板方法模式(Template Method Pattern)
Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
何时使用:
设计者需要给出一个算法的固定步骤,并将某些步骤的具体实现留给子类来实现。 需要对代码进行重构,将各个子类公共行为提取出来集中到一个共同的父类中以避免代码重复。
优点:
可以通过在抽象摸吧能定义模板方法给出成熟的算法步骤,同时又不限制步骤的细节,具体模板实现算法细节不会改变整个算法的骨架。 在抽象模板模式中,可以通过钩子方法对某些步骤进行挂钩,具体模板通过钩子可以选择算法骨架中的某些步骤。
模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。 模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。
例如,我们有这样的操作:首先得到一些数据,然后计算这些数据,最后再输出数据,至于这些操作如何实现(当然,一些方法也可以提前实现),我们没有要求,但是这些操作的先后逻辑我们已经确定好了,子类不能改变:
抽象模板:
//抽象模板public abstract class AbstractTemplate { Object data; //这个就是模板方法 void dealData(){ getData(); calcData(); printData(); } //下面是普通方法,可能已经实现,也可能需要子类实现 abstract void getData(); abstract void calcData(); void printData(){ System.out.println(data); }}
具体模板:
//具体模板public class Template extends AbstractTemplate { @Override void getData() { data = "data"; } @Override void calcData() { data = (String)datadata; }}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33893-30.html
看了很多遍
打倒美帝国主义
政府是他爸扶在那里