23中设计模式----------模版方法模式

模板方法模式:

  模板方法模式,就是定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构可重新定义该算法的某些特定步骤。

简而言之,就是定义一个抽象类,在该抽象类中,有一些需要子类特定实现的方法,和一个基本已经实现不改变的方法,而在这个固定的方法中调用那些需要子类实现的方法,从而达到一些步骤延迟到子类中。

所以,在模板方法模式中一般有两类方法:

1,基本方法。

该方法是由子类实现的,并且在模板方法被调用。

2,模板方法。

一般是一个具体的方法,实现对基本方法的调度,完成固定的逻辑。

例如,一个班级在一个晚会上,每个人都要进行表演唱歌和跳舞,这两项节目。

体现在代码如下:

 1 //抽象模板类
 2 public abstract class StudentShow {
 3
 4     //基本方法1
 5     public abstract void sing();
 6     //基本方法2
 7     public abstract void dance();
 8     //模板方法,对基本方法调用
 9     public void show(){
10         this.sing();
11         this.dance();
12     }
13 }
14 //具体实现子类
15 public class JackShow extends StudentShow {
16
17     public void sing() {
18         System.out.println("Jack 唱歌!!!");
19     }
20     public void dance() {
21         System.out.println("Jack 跳舞!!!");
22     }
23 }
24 public class RoseShow extends StudentShow {
25
26     public void sing() {
27         System.out.println("Rose 唱歌!!!");
28     }
29     public void dance() {
30         System.out.println("Rose 跳舞!!!");
31     }
32 }

具体场景类:

1 public class Client {
2     public static void main(String[] args) {
3         StudentShow jack = new JackShow();
4         StudentShow rose = new RoseShow();
5
6         jack.show();
7         rose.show();
8     }
9 }

这就是模板方法模式,还是比较简单的。

但是,若是Jack只会唱歌不会跳舞,死活都不跳舞,只进行唱歌表演呢,那怎么办呢。

 1 //带控制模板方法的抽象模板类
 2 public abstract class StudentShow {
 3
 4     //基本方法1
 5     public abstract void sing();
 6     //基本方法2
 7     public abstract void dance();
 8
 9     //条件选择判断
10     public boolean isDance(){
11         return true;
12     }
13
14     //模板方法,对基本方法调用
15     public void show(){
16         this.sing();
17         if(isDance()){
18             this.dance();
19         }
20     }
21 }
22 //具体实现类1
23 public class JackShow extends StudentShow {
24
25     public void dance() {
26         System.out.println("Jack !!!");
27     }
28     public void sing() {
29         System.out.println("Jack 跳舞!!!");
30     }
31     //由于Jack不跳舞,所以重写模板类中控制条件的方法。修改返回值为false
32     public boolean isDance(){
33         return false;
34     }
35 }
36 //具体实现类2
37 //业务没有修改的子类则无需改动,大大增加了扩展性。
38 public class RoseShow extends StudentShow {
39
40     public void dance() {
41         System.out.println("Rose 跳舞!!!");
42     }
43     public void sing() {
44         System.out.println("Rose 唱歌!!!");
45     }
46 }
47 //具体场景类也不需改动
48 public class Client {
49     public static void main(String[] args) {
50         StudentShow jack = new JackShow();
51         StudentShow rose = new RoseShow();
52
53         jack.show();
54         rose.show();
55     }
56 }

所以,我们可以通过一些条件来控制模板方法中,调用基本方法的顺序,从而达到不同的业务要求。

时间: 2024-12-26 13:20:05

23中设计模式----------模版方法模式的相关文章

Java的23中设计模式--工厂方法模式(Factory Method)

1.普通工厂模式 工厂类 /** * @Title Factory.java * @Package factory.factory1 * @date 2015-1-22 上午10:16:02 * @version V1.0 */ package factory.factory1; /** * @ClassName Factory * @date 2015-1-22 上午10:16:02 */ public class Factory { public Sender procedure(Strin

23种设计模式(6):模版方法模式

定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤. 类型:行为类模式. 类图: 事实上,模版方法是编程中一个经常用到的模式.先来看一个例子,某日,程序员A拿到一个任务:给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印出来.经过分析之后,这个任务大体上可分为两部分,排序和打印,打印功能好实现,排序就有点麻烦了.但是A有办法,先把打印功能完成,排序功能另找人做. abstract class AbstractS

第13章 模版方法模式(Template Method)

原文  第13章 模版方法模式(Template Method) 模板模式 模板模式 举例:模拟下数据库的update方法,先删除在插入. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47     abstract class SqlManage     {         publi

Java设计模式の模版方法模式

概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 比如定义一个操作中的算法的骨架,将步骤延迟到子类中.模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤. 模式中的角色 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架. 具体类(ConcreteClass):实

设计模式之行为型模式—— 3.6 模版方法模式

<?php /**  * 3.6 模版方法模式  *  定义:  *  定义一个操作中的算法的骨架,而将一些步骤延  *  迟到子类中.模版方法是的子类可以不改变一个  *  算法的结构即可重定义该算法的某些特定步骤.  *  角色:  *  1. 抽象模版方法类  *  职责:定义并实现了一个模版方法.这个模  *    版方法一般是一个具体方法,它给出  *    了一个顶级逻辑的骨架,而逻辑的组  *    成步骤在相应的抽象操作中,推迟到  *    子类实现.顶级逻辑也有可能调用一  

设计模式 模版方法模式 展现程序员的一天

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 继续设计模式~ 模版方法模式 老套路,先看下定义:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤. 简单看下定义,模版方法定义了一个算法的步骤,并且允许子类为一个或多个步骤提供实现.定义还算清晰,下面来个例子展示下本公司的上班情况(纯属娱乐,如有雷同,请对号入座).简单描述一下:本公司有程序猿.测试

设计模式之模版方法模式

1.模版方法模式简介: a.模版方法模式的简单介绍: -  模版方法模式是编程中经常用到模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个算法结构的前提上重新定义该算法的某些特定步骤. b.核心:处理某个流程中的代码已经都具备,但是其中某个节点的代码暂时不能确定.因此,我们采用模版方法模式,将这个节点的代码实现转移给子类中完成.即:处理步骤父类中定义好,具体实现延迟到子类中定义. 2.简单的代码演示: 在 BankTemplateMethod 类中添加

Python设计模式——模版方法模式

1.模版方法模式 做题的列子: 需求:有两个学生,要回答问题,写出自己的答案 #encoding=utf-8 __author__ = '[email protected]' class StudentA(): def answer1(self): print '题目一:XXXXXX' print '我的答案是:B' def answer2(self): print '题目一:XXXXXX' print '我的答案是:B' class StudentB(): def answer1(self):

(4)模版方法模式

(4)模版方法模式 定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤. 类型:行为类模式 类图: 事实上,模版方法是编程中一个经常用到的模式.先来看一个例子,某日,程序员A拿到一个任务:给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印出来.经过分析之后,这个任务大体上可分为两部分,排序和打印,打印功能好实现,排序就有点麻烦了.但是A有办法,先把打印功能完成,排序功能另找人做. abstract class