设计模式之模板模式
来源:互联网 发布:c语言大括号的用法 编辑:程序博客网 时间:2024/05/29 18:05
模板模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
优点:
1、模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
2、子类实现算法的某些细节,有助于算法的扩展。
3、通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
缺点:
1、每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
适用场景:
1、在某些类的算法中,用了相同的方法,造成代码的重复。
2、控制子类扩展,子类必须遵守算法规则。
结构图:
例子:不同的人锻炼的身体的时候,内容不一样,但是都要经过锻炼前准备、锻炼、锻炼后放松等三个阶段。
抽象类AbstractClass
public abstract class Exercise {//抽象类定义整个流程骨架public void doExercise(){prepareToExercise();doYourExercise();relaxBody();} //以下是不同子类根据自身特性完成的具体步骤 protected abstract void prepareToExercise();protected abstract void doYourExercise();protected abstract void relaxBody();}
具体类1:
public class AthleteExercise extends Exercise {@Overrideprotected void prepareToExercise() {System.out.println("拉伸活动");}@Overrideprotected void doYourExercise() {System.out.println("跑步10公里");}@Overrideprotected void relaxBody() {System.out.println("慢走放松30分钟");}}具体类2:
public class SwimmerExercise extends Exercise {@Overrideprotected void prepareToExercise() {System.out.println("跑步热身400米");}@Overrideprotected void doYourExercise() {System.out.println("游泳1000米");}@Overrideprotected void relaxBody() {System.out.println("放松运动");}}
client类:
public class Client {public static void main(String[] args) {AthleteExercise athleteExercise=new AthleteExercise();athleteExercise.doExercise();SwimmerExercise swimmerExercise=new SwimmerExercise();swimmerExercise.doExercise();}}
0 0
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之 - 模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- 设计模式之模板模式
- Java学习笔记_004_类和对象
- 感受野(receptive field)
- JavaScript实用代码
- js typeof 变量名 类型 instanceof Object 区别
- 安卓设备开机默认最大音量
- 设计模式之模板模式
- Tomcat性能调优, 启动出现警告问题 [minSpareThreads did not find a matching property.]
- 第十六章 什么是例行性工作排程(定时任务)
- 数组素数排序(作业)
- Java时间转换格式大全
- jQuery源码初探(1)
- 第十六章 仅运行一次的工作排程(at)
- svn图标会存在延迟怎么办?还有不出现图标怎么办?
- Caffe GNU error