<设计模式15>模板方法模式
2016-09-18 22:49
441 查看
模板方法模式是经常使用的设计模式之一,其思想就是通过一个抽象类,即模板,来架构出大致的算法、操作的框架,而具体的方法则交给子类实现,这样,我们只需要实现子类,而整体的逻辑架构不需要我们去实现,即可使用。
下面给出一个简单的模板。
AbstractTemplate:即模板方法
public abstract class AbstractTemplate {
public void operate(){
method1();
method2();
}
public abstract void method1();
public abstract void method2();
}
这是一个抽象类,这个类中operate方发已经实现,也就是这个模板的逻辑,我们只要实现method1和method2。
ConcreteTemplate:具体实现
public class ConcreteTemplate extends AbstractTemplate {
@Override
public void method1() {
System.out.println("do somethings1");
}
@Override
public void method2() {
System.out.println("do somethings2");
}
}我们在这个子类中实现了两个抽象方法,而operate方法在模板中已经写好,因此当我们要操作时,即可实现出operate的逻辑
使用测试:
public class TemplateMethodTest {
public static void main(String[] args) {
AbstractTemplate template = new ConcreteTemplate();
template.operate();
}
}
结果:
do somethings1
do somethings2
这就是模板方法模式的基本使用。通过一个抽象的模板,先做出了部分逻辑,而通过子类的具体实现,来获得不同的结果。
它适用于,我们已经知道实现的逻辑顺序,但是我们不知道具体的实现方法,或者实现方法有很多种,这时,模板方法模式就很适用。
下面给出一个简单的模板。
AbstractTemplate:即模板方法
public abstract class AbstractTemplate {
public void operate(){
method1();
method2();
}
public abstract void method1();
public abstract void method2();
}
这是一个抽象类,这个类中operate方发已经实现,也就是这个模板的逻辑,我们只要实现method1和method2。
ConcreteTemplate:具体实现
public class ConcreteTemplate extends AbstractTemplate {
@Override
public void method1() {
System.out.println("do somethings1");
}
@Override
public void method2() {
System.out.println("do somethings2");
}
}我们在这个子类中实现了两个抽象方法,而operate方法在模板中已经写好,因此当我们要操作时,即可实现出operate的逻辑
使用测试:
public class TemplateMethodTest {
public static void main(String[] args) {
AbstractTemplate template = new ConcreteTemplate();
template.operate();
}
}
结果:
do somethings1
do somethings2
这就是模板方法模式的基本使用。通过一个抽象的模板,先做出了部分逻辑,而通过子类的具体实现,来获得不同的结果。
它适用于,我们已经知道实现的逻辑顺序,但是我们不知道具体的实现方法,或者实现方法有很多种,这时,模板方法模式就很适用。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序