设计模式(三)Template Method模式

  在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式即模板方法模式。

  

  根据下面的示例程序理解模板方法模式。

 1 package BigJunOba.bjtu.TemplateMethod;
 2
 3 public abstract class AbstractDisplay {
 4
 5     public abstract void open();
 6     public abstract void print();
 7     public abstract void close();
 8     public final void display() {
 9         open();
10         for (int i = 0; i < 5; i++) {
11             print();
12         }
13         close();
14     }
15 }

  AbstractDisplay类是示例程序的核心。该类只实现了display方法,这个实现了的方法就是处理流程的框架。之后的子类都是按照这个框架来进行流程。(注意:这里的display方法是final方法,即子类不能继承这个方法也不能修改这个方法,只能调用这个方法。)

 1 package BigJunOba.bjtu.TemplateMethod;
 2
 3 public class CharDisplay extends AbstractDisplay {
 4
 5     private char ch;
 6
 7     public CharDisplay(char ch) {
 8         this.ch = ch;
 9     }
10
11     @Override
12     public void open() {
13         System.out.print("<<");
14     }
15
16     @Override
17     public void print() {
18         System.out.print(ch);
19     }
20
21     @Override
22     public void close() {
23         System.out.println(">>");
24     }
25
26 }

  作为子类之一的CharDisplay类可以对单个字符进行打印操作。

 1 package BigJunOba.bjtu.TemplateMethod;
 2
 3 public class StringDisplay extends AbstractDisplay {
 4
 5     private String string;
 6     private int width;
 7
 8     public StringDisplay(String string) {
 9         this.string = string;
10         this.width = string.getBytes().length;
11     }
12
13     @Override
14     public void open() {
15         printline();
16     }
17
18     @Override
19     public void print() {
20         System.out.println("|" + string + "|");
21     }
22
23     @Override
24     public void close() {
25         printline();
26     }
27
28     private void printline() {
29         System.out.print("+");
30         for (int i = 0; i < width; i++) {
31             System.out.print("-");
32         }
33         System.out.println("+");
34     }

  作为子类之一的StringDisplay可以对字符串进行操作。

 1 package BigJunOba.bjtu.TemplateMethod;
 2
 3 public class Main {
 4     public static void main(String[] args) {
 5         AbstractDisplay d1 = new CharDisplay(‘H‘);
 6         AbstractDisplay d2 = new StringDisplay("Fighting, BigJun");
 7         d1.display();
 8         d2.display();
 9     }
10 }

  main方法中,生成了CharDisplay和StringDisplay的示例,然后可以调用继承的display方法。实际的程序行为取决于CharDisplay类和StringDisplay类的具体实现。

 

原文地址:https://www.cnblogs.com/BigJunOba/p/8671083.html

时间: 2024-07-30 01:31:33

设计模式(三)Template Method模式的相关文章

一天一个设计模式——模板方法(Template Method)模式

一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜料,什么颜色的颜料来印刷文字,取决于具体实际业务场景的需要.由此可见,模板制定了某些固定的条条框框,以及事物的处理标准流程,但是并没有说明如何去做,具体如何做,取决于使用模板的人. 在程序设计领域,模板是具有一系列抽象方法的接口类,单看接口类,我们只能知道这个模板有哪些抽象方法以及这些方法的调用顺序

Android与设计模式——模板方法(Template Method)模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 模板方法模式的结构 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术. 模板方法模式需要开发抽象类和具体子类的设计师之间的协作

设计模式 Template Method模式 显示程序猿的一天

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/26276093 不断设计模式~ Template Method模式 老套路,看高清:它定义的算法的骨架.虽然某些步骤推迟到子类中.不改变算法结构的情况下.又一次定义算法的步骤. 简单看下定义,模版方法定义了一个算法的步骤,而且同意子类为一个或多个步骤提供实现. 定义还算清晰,以下来个样例展示下本公司的上班情况(纯属娱乐,如有雷同.请对号入座).简单描写叙述一下:本公司有程序员.測

行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子类通过继承这个抽象基类去实现各个步聚的抽象方法,而工作流程却由父类来控制. 2 模板方法应用于下列情况: 1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现. 2)各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复.首先识别现有代码中的不同之处,并且将不同之处分离为新

图解设计模式-Template Method模式

父类中定义处理流程,子类中实现具体处理的模式称为Template Method模式 优点: 可以保持逻辑处理通用化(父类中定义处理流程) 父类与子类之间协作(子类实现父类的抽象方法) 父类与子类保持一致性(子类继承父类) 延伸: 子类可以使用父类的方法 可以通过子类增加方法以实现新功能 子类重写父类的方法可以改变程序的行为 角色划分: AbstractClass抽象类:负责实现模块方法,还负责声明在模板方法中所使用到的抽象方法,这些抽象方法由子类负责实现. ConcreteClass具体类:实现

设计模式三—抽象工厂模式

设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是园丁2的杰作 1.Fruit.java public interface Fruit { /* * 生长 * 收获 * 栽种 */ public void grow(); public void harvest(); public void plant(); } 2.Apple.java publi

Template Method模式和Strategy模式[继承与委托]

继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Template Method(使用继承)和Strategy(使用委托)模式解决了相同的问题:分离通用的算法和具体的上下文(DIP). Template Method模式. Strategy模式 Template Method模式允许一个通用算法操纵多个可能的具体实现. 而完全遵循DIP的Strategy

设计模式之Factory Method模式

作用:将实例的生成交给子类 用Template Method模式来构建生成实例的工厂,这就是Factory Method模式. 在Factory Method中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类去负责 UML类图: Product类: public abstract class Product { public abstract void use(); } use方法的实现交给Product的子类 Factory类: public abstract c

Template method模式

Template Method模式 在父类中定义处理流程的框架,在子类中实现具体处理 在Template Method模式中有以下登场角色 AbstractClass(抽象类) ConcreteClass (具体类) AbstractClass角色不仅负责实现模版方法, z 当使用AbstractClass abC = new ConcreteClass("ABC")时,再调用abC.templateMethod方法,会执行templateMetod方法中的内容,如果template方