学习笔记-设计理念之模板方式模式
一、概念
模板方式模式(Template Method Pattern)是指定义一个算法的骨架,并允许子类为一个或者多个流程提供推动。模板方式并且子类可以在不改变算法结构的状况下,重新定义算法的这些方法。
生活中有众多事情是有规律可循的备课笔记模板,比如做菜,基本步骤是放油->加菜->翻炒->出锅,不同的佐料做起来的菜不同,放不同的佐料味道也不同,模板方式模式就是把主体流程抽象出来备课笔记模板,把部分原则提供帮子类实现。
二、实现
需求:实现教师教书的过程,假设老师必须教物理,数学,英语。教书流程是教研(制作PPT)->讲课->布置作业->宣布下课。
话不多说,先上代码。
1 public class ChineseCourse { 2 3 public void createChineseCourse(){ 4 // 制作PPT 5 makeChinesePpt(); 6 // 讲课 7 haveChineseLessons(); 8 // 布置作业 9 giveChineseHomework(); 10 // 宣布下课 11 finishClass(); 12 } 13 14 private void finishClass() { 15 System.out.println("宣布下课"); 16 } 17 18 private void giveChineseHomework() { 19 System.out.println("布置语文作业"); 20 } 21 22 private void haveChineseLessons() { 23 System.out.println("上语文课"); 24 } 25 26 private void makeChinesePpt() { 27 System.out.println("制作语文PPT"); 28 } 29 }
1 public class MathCourse { 2 3 public void createMathCourse(){ 4 // 制作PPT 5 makeMathPpt(); 6 // 讲课 7 haveMathLessons(); 8 // 布置作业 9 giveMathHomework(); 10 // 宣布下课 11 finishClass(); 12 } 13 14 private void finishClass() { 15 System.out.println("宣布下课"); 16 } 17 18 private void giveMathHomework() { 19 System.out.println("布置数学作业"); 20 } 21 22 private void haveMathLessons() { 23 System.out.println("上数学课"); 24 } 25 26 private void makeMathPpt() { 27 System.out.println("制作数学PPT"); 28 } 29 }
1 public class EnglishCourse { 2 3 public void createEnglishCourse(){ 4 // 制作PPT 5 makeEnglishPpt(); 6 // 讲课 7 haveEnglishLessons(); 8 // 布置作业 9 giveEnglishHomework(); 10 // 宣布下课 11 finishClass(); 12 } 13 14 private void finishClass() { 15 System.out.println("宣布下课"); 16 } 17 18 private void giveEnglishHomework() { 19 System.out.println("布置英语作业"); 20 } 21 22 private void haveEnglishLessons() { 23 System.out.println("上英语课"); 24 } 25 26 private void makeEnglishPpt() { 27 System.out.println("制作英语PPT"); 28 } 29 }
测试类
1 public class TemplateTest { 2 3 public static void main(String[] args) { 4 ChineseCourse chineseCourse = new ChineseCourse(); 5 chineseCourse.createChineseCourse(); 6 7 EnglishCourse englishCourse = new EnglishCourse(); 8 englishCourse.createEnglishCourse(); 9 10 MathCourse mathCourse = new MathCourse(); 11 mathCourse.createMathCourse(); 12 } 13 }
虽然基本业务用途可以推动,但是成为有追求的程序员们不难发现,教课的步骤基本一致,且个别步骤完全可以复用,由此,模板方式出现了。
首先定义模板类
1 public abstract class CourseTemplate { 2 3 public void createCourse(){ 4 // 制作PPT 5 makePpt(); 6 // 讲课 7 haveLessons(); 8 // 布置作业 9 giveHomework(); 10 // 宣布下课 11 finishClass(); 12 } 13 14 public abstract void makePpt(); 15 16 public abstract void haveLessons(); 17 18 public abstract void giveHomework(); 19 20 public void finishClass(){ 21 System.out.println("宣布下课"); 22 } 23 }
模板类定义了上课的主要步骤(备课(制作PPT)->讲课->布置作业->宣布下课)并且推动了个别通用办法(finishClass)。
下面开始改造相关课程
1 public class ChineseCourse extends CourseTemplate { 2 3 public void giveHomework() { 4 System.out.println("布置语文作业"); 5 } 6 7 public void haveLessons() { 8 System.out.println("上语文课"); 9 } 10 11 public void makePpt() { 12 System.out.println("制作语文PPT"); 13 } 14 }
1 public class EnglishCourse extends CourseTemplate{ 2 3 public void giveHomework() { 4 System.out.println("布置英语作业"); 5 } 6 7 public void haveLessons() { 8 System.out.println("上英语课"); 9 } 10 11 public void makePpt() { 12 System.out.println("制作英语PPT"); 13 } 14 }
1 public class MathCourse extends CourseTemplate{ 2 3 public void giveHomework() { 4 System.out.println("布置数学作业"); 5 } 6 7 public void haveLessons() { 8 System.out.println("上数学课"); 9 } 10 11 public void makePpt() { 12 System.out.println("制作数学PPT"); 13 } 14 15 }
测试类
public class TemplateTest { public static void main(String[] args) { CourseTemplate chineseCourse = new ChineseCourse(); chineseCourse.createCourse(); CourseTemplate mathCourse = new MathCourse(); mathCourse.createCourse(); CourseTemplate englishCourse = new EnglishCourse(); englishCourse.createCourse(); } }
课程只需实现模板类的抽象原则,提高了代码复用性。
http://www.jiaoanw.com/%E6%95%99%E6%A1%88%E6%A8%A1%E6%9D%BF/article-81186-1.html
http://www.jiaoanw.com/
true
教案网
http://www.jiaoanw.com/%E6%95%99%E6%A1%88%E6%A8%A1%E6%9D%BF/article-81186-1.html
report
23990
虽然基本业务功能可以实现,但是作为有追求的程序员们不难发现,教课的流程基本一致,且部分方法完全可以复用,由此,模板方法出现了。模板类定义了上课的主要流程(备课(制作PPT)-讲课-布置作业-宣布下课)并且实现了部分通用方法(finishClass)。
现在打我们是鱼