博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板方法模式
阅读量:4946 次
发布时间:2019-06-11

本文共 2403 字,大约阅读时间需要 8 分钟。

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     @Override10     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     @Override11     protected boolean needWriteArticle() {12         return needWriteActicleFlag;13     }14 15     @Override16     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 }

 

转载于:https://www.cnblogs.com/linbq1911/p/10229366.html

你可能感兴趣的文章
使用map集合添加菜单,运用反射,获取方法,执行程序
查看>>
JS学习笔记11_高级技巧
查看>>
photoshop 基本操作
查看>>
for引用变量
查看>>
Jsoup库 解析DOM文档
查看>>
C#2.0 特性
查看>>
响应式web-媒体查询
查看>>
Weblogic部署项目三种方式
查看>>
IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角...
查看>>
Java中的国际化
查看>>
AOJ 0033 Ball【DFS】
查看>>
【hdu5217-括号序列】线段树
查看>>
UVa 11134 - Fabled Rooks 优先队列,贪心 难度: 0
查看>>
nc6.5(二开) 修改元数据后,单据单据追溯不了
查看>>
随机数(不重复)
查看>>
php优化,操作码优化,缓存优化
查看>>
NYOJ-14 会场安排问题 -----贪心
查看>>
Docker进阶之八:搭建LNMP网站平台实战
查看>>
常用的 Python 标准库都有哪些?
查看>>
新手学PHP必看
查看>>