首页 > 代码库 > 第十话-模板方法模式

第十话-模板方法模式

一个mo子里刻出来的?NO,NO,NO应该是一个mu子里立刻出来的。今天看了模板方法模式,一起学习了。
一、什么是模板方法模式?
定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
请大家细细品味定义,模板方法模式,父类只考虑骨架,子类只考虑血肉。有一些不必父类做的事情要放到子类中去。
二、模板方法模式有哪些应用?
应用太广泛了,也许你已经悄悄的用了N年了。因为此模式可以封装不变部分,扩展可变部分。所以,我们要提取公共部分代码,便于维护。你想到的基本都可以使用此模式。

三、一个小例子

技术分享

父类(抽象类;包括基本模板方法和抽象方法;基本模板方法是骨架;抽象方法是留给子类实现的;)
TestPaper.java
public abstract class TestPaper {
public void question1(){
System.out.println("问题1:请问世界上最大的湖是什么湖?");
System.out.println("答案1:"+answer1());
}

public void question2(){
System.out.println("问题2:你所知道的最大数?");
System.out.println("答案2:"+answer2());
}

protected abstract String answer1();
protected abstract String answer2();

}
具体子类
Student1.java
public class Student1 extends TestPaper {


@Override
protected String answer1() {
// TODO Auto-generated method stub
return "苏必利尔湖";
}


@Override
protected String answer2() {
// TODO Auto-generated method stub
return "3";
}


}


Student2.java


public class Student2 extends TestPaper {


@Override
protected String answer1() {
// TODO Auto-generated method stub
return "里海";
}


@Override
protected String answer2() {
// TODO Auto-generated method stub
return "1";
}


}


测试主类:


public class Main {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestPaper paper1 = new Student1();
TestPaper paper2 = new Student2();
System.out.println("学生1的试卷:");
paper1.question1();
paper1.question2();
System.out.println("学生2的试卷:");
paper2.question1();
paper2.question2();

}


}


四、小结
忘了是在哪个大牛博客里看到的了,如果你只想学习一个设计模式,那就学习模板方法模式吧。
模板方法模式很简单,但实用性强,并且使用广泛。所以,学习吧。嘿嘿。下一话:迪米特法则

第十话-模板方法模式