模板方法模式
Posted linbq1911
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板方法模式相关的知识,希望对你有一定的参考价值。
1.定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现;
模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。
2.类型:行为型
3.适用场景:一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现;
各子类中公共的行为被提取出来并集中到一个公共父类中,从而避免代码重复。
4.优点:提高复用性、提供扩展性、符合开闭原则。
5.缺点:类数目增加,增加了系统实现的复杂度;继承关系自身缺点,
如果父类添加新的抽象方法,所有子类都要改一遍。
6.扩展:钩子方法
7.相关设计模式:工厂方法模式、策略模式。
8.实例目录package
9.实例UML类图
10.代码
1 package com.geely.design.pattern.behavioral.templatemethod; 2 3 public abstract class ACourse { 4 protected final void makeCourse(){ 5 makePPT(); 6 makeVideo(); 7 if(needWriteArticle()){ 8 writeArtile(); 9 } 10 packageCourse(); 11 } 12 13 final void makePPT(){ 14 System.out.println("制作PPT"); 15 } 16 final void makeVideo(){ 17 System.out.println("制作视频"); 18 } 19 final void writeArtile(){ 20 System.out.println("编写手记"); 21 } 22 23 protected boolean needWriteArticle(){ 24 return false; 25 } 26 27 abstract void packageCourse(); 28 }
1 package com.geely.design.pattern.behavioral.templatemethod; 2 3 public class DesignPatternCourse extends ACourse { 4 @Override 5 protected boolean needWriteArticle() { 6 return true; 7 } 8 9 @Override 10 void packageCourse() { 11 System.out.println("提供课程Java源代码"); 12 } 13 }
1 package com.geely.design.pattern.behavioral.templatemethod; 2 3 public class FECourse extends ACourse{ 4 private boolean needWriteActicleFlag = false; 5 6 public FECourse(boolean needWriteActicleFlag) { 7 this.needWriteActicleFlag = needWriteActicleFlag; 8 } 9 10 @Override 11 protected boolean needWriteArticle() { 12 return needWriteActicleFlag; 13 } 14 15 @Override 16 void packageCourse() { 17 System.out.println("提供课程前端代码"); 18 System.out.println("提供课程的图片等多媒体素材"); 19 } 20 }
1 package com.geely.design.pattern.behavioral.templatemethod; 2 3 public class Test { 4 public static void main(String[] args) { 5 System.out.println("后端设计模式课程start---"); 6 ACourse designPatternCourse = new DesignPatternCourse(); 7 designPatternCourse.makeCourse(); 8 System.out.println("后端设计模式课程end---"); 9 10 System.out.println("前端课程start---"); 11 ACourse feCourse = new FECourse(true); 12 feCourse.makeCourse(); 13 System.out.println("前端课程end---"); 14 } 15 }
以上是关于模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章