Template method模式

Template Method模式

在父类中定义处理流程的框架,在子类中实现具体处理

在Template Method模式中有以下登场角色

  • AbstractClass(抽象类)
  • ConcreteClass (具体类)

AbstractClass角色不仅负责实现模版方法,

z

当使用AbstractClass abC = new ConcreteClass(“ABC”)时,再调用abC.templateMethod方法,会执行templateMetod方法中的内容,如果template方法中指定了method1, method2 和method3的实现,则会执行ConcreteClass实现的方法。

名字 说明
AbstractDisplay 只实现了display方法的抽象类
CharDisplay 实现了open、print、 close方法的类
StringDisplay 实现了open、 print、 close方法的类
Main 测试程序行为的类

模版方法

调用抽象方法的display方法就是模版方法。它有两个核心要素一是在抽象类中,二是调用抽象方法

AbstractDisplay.java

public abstract class AbstractDisplay {
    public abstract void open();
    public abstract void print();
    public abstract void close();
    public final void display(){
        open();
        for (int i=0;i<5;i++){
            print();
        }
        close();
    }

}

CharDisplay.java

public class CharDisplay extends AbstractDisplay {
    private char ch;

    public CharDisplay(char ch) {
        this.ch = ch;
    }

    @Override
    public void open() {
        System.out.println("<<");
    }

    @Override
    public void print() {
        System.out.println(ch);
    }

    @Override
    public void close() {
        System.out.println(">>");
    }
}

StringDisplay.java

public class StringDisplay extends AbstractDisplay{

    private String string;
    private int width;
    public StringDisplay(String string){
        this.string = string;
        this.width = string.length();
    }

    public void open(){
        printLine();
    }

    public void print(){
        System.out.println("|"+string+"|");
    }

    public void close(){
        printLine();
    }

    private void printLine(){
        System.out.print("+");
        for (int i = 0; i < width ; i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        AbstractDisplay d1 = new CharDisplay('H');
        d1.display();

        AbstractDisplay d2 = new StringDisplay("Hello,World");
        d2.display();

        AbstractDisplay d3= new StringDisplay("Hello,World");
        d3.display();

    }
}

运行结果

可以看到,调用父类的display模版方法后,会执行模版方法,尽管父类没有实现模版方法,但是会执行子类中已经实现的模版方法。所以可以根据子类定制具体的实现,但是父类的算法都是一致的。

总结

使用template Method的好处,

1.可以使逻辑处理通用化,由于在父类中编写了算法,因此无需在子类中编写算法。

2.父类和子类之间的协作,在 template method模式中,子类和父类紧密联系、共同工作,因此,在子类中实现父类中声明的抽象方法时,必须要理解抽象方法被调用的时机。

原文地址:https://www.cnblogs.com/zhichun/p/12293600.html

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

Template method模式的相关文章

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

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

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

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

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

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

设计模式(三)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 cl

图解设计模式-Template Method模式

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

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

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

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

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

封装算法: 模板方法(Template Method)模式

template method(模板方法)模式是一种行为型设计模式.它在一个方法中定义了算法的骨架(这种方法被称为template method.模板方法),并将算法的详细步骤放到子类中去实现.template method使得子类能够不改变一个算法的结构就可以重定义该算法的某些特定步骤. 须要指出的是,这里所说的template并非c++中的模板. 适用性 算法的骨架事先已确定,仅仅是算法的某些步骤的详细实如今不同的子类中有所不同 优点 算法的基本骨架已确定,子类能够方便地实现算法的变体 避免

Behavioral模式之template Method模式

1.意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 2.别名 暂无 3.动机 考虑一个提供Application和Document类的应用框架.Application类负责打开一个已有的以外部形式存储的文档,如一个文件.一旦一个文档中的信息重该文件中读出后,它就由一个Document对象表示. 4.适用性 以下情况使用Strategy模式: - 一次性实现一个算法的不变的部分并将可变的行为留