模板方法模式templeteMethod
引出模板模式:
考试试卷问题,提炼后的代码:
package com.disign.templetemethod; import org.junit.Test; /**
* Created by zhen on 2017-05-17.
*/
public class TestPaper {
String name;
public void setName(String name){
this.name = name;
}
public TestPaper(){}
public void testQuestionA(){
System.out.println("1+1=? a.2 b.3 c.4 d.5");
System.out.println("答案:" + answerA());
}
public void testQuestionB(){
System.out.println("1*1=? a.1 b.2 c.3 d.4");
System.out.println("答案:" + answerB());
}
public void testQuestionC(){
System.out.println("1-1=? a.0 b.1 c.2 d.3");
System.out.println("答案:" + answerC());
} public String answerA(){
return null;
}
public String answerB(){
return null;
}
public String answerC(){
return null;
} public void show(){
System.out.println(name + "的试题!");
testQuestionA();
testQuestionB();
testQuestionC();
} @Test
public void testQuestion(){
TestPaper studentA = new TestPaperA();
studentA.setName("A");
TestPaper studentB = new TestPaperB();
studentB.setName("B");
studentA.show();
studentB.show();
}
}
class TestPaperA extends TestPaper{
public TestPaperA(){} @Override
public String answerA() { return "a";
} @Override
public String answerB() {
return "a";
} @Override
public String answerC() {
return "a";
}
}
class TestPaperB extends TestPaper{
public TestPaperB(){} @Override
public String answerA() {
return "b";
} @Override
public String answerB() {
return "b";
} @Override
public String answerC() {
return "b";
}
}
这里就用到了模板方法模式。
模板方法模式:
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类不改变一个算法的结构即可重定义该算法某些特定步骤

AbstractClass是抽象,其实也就是一抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
ConreteClass,实现父类所定义的一个或者多个抽象方法。每一个AbstractClass都可以有人以有任意多个ConreteClass与之对应,而每一个ConreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
模板方法模式的特点:
模板方法模式是把不变行为搬移到超类,去除子类中的重复代码来体现它的优势
模板方法模式提供了一个很好的代码复用平台
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现,我们使用模板方法模式,帮助子类摆脱重复的不变行为的纠缠。
模板方法模式templeteMethod的更多相关文章
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
- 设计模式(十四)模板方法模式(Template Pattern)
一.引言 提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简 ...
- C#设计模式-模板方法模式
提到模板,大家肯定不免想到生活中的“简历模板”.“论文模板”.“Word中模版文件”等,在现实生活中,模板的概念就是——有一个规定的格式,然后每个人都可以根据自己的需求或情况去更新它,例如简历模板,下 ...
- C#设计模式系列:模板方法模式(Template Method)
你去银行取款的时候,银行会给你一张取款单,这张取款单就是一个模板,它把公共的内容提取到模板中,只留下部分让用户来填写.在软件系统中,将多个类的共有内容提取到一个模板中的思想便是模板方法模式的思想. 模 ...
- 编程模式之模板方法模式(Template Method)
模板方法模式由两个角色组成:父类角色,子类角色. 父类角色:提供模板. 子类角色:为父类模板提供实现. 类图: JAVA代码: AbstractClass.java package com.templ ...
- 轻松掌握:JavaScript模板方法模式
模板方法模式 假如我们有一些对象,各个对象之间有一些相同的行为,也有一些不同的行为,这时,我们就可以用模板方法模式来把相同的部分上移到它们的共同原型中(父类),而将不同的部分留给自己各自重新实现. 模 ...
- java设计模式 模板方法模式Template Method
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己 ...
- java设计模式之模板方法模式
模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通俗的说的就是有很多相同的步骤的,在某一些地方可能有一些差 ...
- 【Java】模板方法模式
今天介绍的是模板方法模式~ 模板方法模式,由父类定制总体的框架,具体的细节由子类实现. 一般来说,模板方法中有3类方法: 抽象方法,父类声明方法待子类具体实现.比如例子的validate.save.u ...
随机推荐
- 商铺项目(使用DES加密配置信息)
package com.ouyan.o2o.util; import java.security.Key; import java.security.SecureRandom; import java ...
- 前端页面汉子显示为问号,需修改 linux下面修改mysql 数据库的字符编码为utf8
设置MySQL数据库编码为UTF-8 登陆后查看数据库当前编码:SHOW VARIABLES LIKE 'char%'; 修改/etc/mysql/my.cnf (默认安装路径下) (标签下没有的添加 ...
- spring基础-01
IOC : inversion of 缩写, DI:dependency injection 即在调用者中注入被调用者的实例. AOP 面向切面编程,是代理模式的体现.spring默认使用JDK的动态 ...
- (转)关于EntityFramework中连接字符串的说明
1. 基本格式 <connectionStrings> <add name="MyEntities" connectionString="metadat ...
- Spring—切点表达式
摘要: Spring中的AspectJ切点表达式函数 切点表达式函数就像我们的GPS导航软件.通过切点表达式函数,再配合通配符和逻辑运算符的灵活运用,我们能很好定位到我们需要织入增强的连接点上.经过上 ...
- ac自动机系列
hdu2222这题说的是在一个1000000的长串中找出n个短串是否在其中出现过 最后输出在长串中出现的个数 #include <iostream> #include <cstdio ...
- PHImageManager 获取图片模糊
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; options.synchronous = true; o ...
- css 文档流中块级非替换元素水平区域的计算规则(1)
最近在读<Basic Visual Formatting in CSS>,结合以前看的<css权威指南>和css标准.今天就做个笔记. 以前在遇到一些宽度不明确指明的一些布局的 ...
- Python笔记 #15# Pandas: Missing Data
10 Minutes to pandas import pandas as pd import numpy as np import matplotlib.pyplot as plt dates = ...
- P1052 过河(离散化+dp)
P1052 过河 dp不难,重点是要想到离散化. 石子个数$<=100$意味着有大量空间空置,我们可以缩掉这些空间. 实现的话自己yy下就差不多了. #include<iostream&g ...