什么是模板方法模式:
在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中去实现,模板方法可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板方法把不变的行为搬到了父类中,去除了子类中重复的代码,实现了代码的复用。有的时候我们会遇到一系列步骤构成的过程需要执行,这个过程从高层次上看是相同的,但是有些步骤的实现可能不同,这个时候就应该考虑模板方法模式了。
比如我们要做两道菜:一道是肉末炒茄子,一道是西红柿炒蛋。
肉末茄子的做法是:
1.热锅
2.放油
3.放入肉末和茄子
4.炒5分钟
西红柿炒蛋的做法是:
1.热锅
2.放油
3.放入蛋和西红柿
4.炒3分钟
从高的层次可以看出,它们的烹调过程是类似的,而且有相同的步骤。下面我们就用模板方法将它们抽象出来。
热锅和放油这两个方法是相同的,我们可以把它们放到超类中去实现。而放入肉末和茄子与放入蛋和西红柿,都是放入佐料,我们可以给它抽象出一个方法accedeStuff(),同样,烹调的时间也抽象成一个方法cookSometime()
我们可以得出这样一个抽象类:
public abstract class Cook {
/**
* 抽象方法,由子类完成。加入食材
*
* */
public abstract void accedeStuff();
/**
* 抽象方法,由子类完成。烹调适当的时间
*
* */
public abstract void cookSometime();
/**
*
* 为什么叫模板方法,因为它就是一个方法。用来炒茄子或者西红柿。算法中的每个步骤都被一个方法代表者。
* 某些方法是由这个类来处理,比如热锅和加油。某些类是交给子类来实现的,这就需要将这个类声明为抽象的,
* 以便子类覆盖,
*
* */
public void cookTemplateMethod()
{
warmPan();
pourOil();
accedeStuff();
cookSometime();
}
/**
* 将相同的代码在超类中完成,热锅
*
* */
private void warmPan()
{
Log.e("*********Method1:", "warmPan");
}
/**
* 将相同的代码在超类中完成,倒油
*
* */
private void pourOil()
{
Log.e("*********Method2:", "pourOil");
}
}
2.实例化这个抽象类
CookTomato.java
/**
* 炒西红柿
*
* */
public class CookTomato extends Cook{
@Override
public void accedeStuff() {
Log.e("*********accedeStuff:", "egg and tomato");
}
@Override
public void cookSometime() {
Log.e("*********cookSometime:", "3 minutes");
}
}
CookAubergine.java
/**
* 炒茄子
*
* */
public class CookAubergine extends Cook{
@Override
public void accedeStuff() {
Log.e("*********accedeStuff:", "meat and aubergine");
}
@Override
public void cookSometime() {
Log.e("*********cookSometime:", "5 minutes");
}
}
即,我们在子类中实现这些抽象方法。
最后我们需要在MainActivity.java中进行测试:
MainActivity.java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CookAubergine cookAubergine = new CookAubergine();
CookTomato cookTomato = new CookTomato();
Log.d("-----------", "making aubergine");
cookAubergine.cookTemplateMethod();
Log.d("-----------", "making tomato");
cookTomato.cookTemplateMethod();
}
}
打印结果:
- 大小: 40.5 KB
分享到:
相关推荐
java的23种常用设计模式:模板方法模式
适合20分钟左右讲解的模板方法模式。 自己上课用的。
模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
设计模式-模板方法模式(讲解及其实现代码)
设计模式C++学习之模板方法模式(Template Method)
设计模式模板方法模式PPT学习教案.pptx
模板方法模式的示例代码和文档,学习模板方法模式的参考资料。
模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。 在模板方法模式中,我们...
策略模式结合模板方法模式
iOS模板方法模式使用心得demo
模板方法模式例子代码
处理层的设计采用了设计模式中的策略模式、模板方法模式和工厂模式。 Server端和Client端的实现也采用了分层的设计方式,包含自定义的模型层、视图层和控制层。 说明:程序采用配置文件的方式进行初始化,运行时时请...
设计模式--模板方法模式java例子
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
将《Head First 设计模式》(中文版)按章节进行了分割,每章一个文件,方便大家下载。