图解设计模式-Template Method模式

父类中定义处理流程,子类中实现具体处理的模式称为Template Method模式

优点:

可以保持逻辑处理通用化(父类中定义处理流程)

父类与子类之间协作(子类实现父类的抽象方法)

父类与子类保持一致性(子类继承父类)

延伸:

子类可以使用父类的方法

可以通过子类增加方法以实现新功能

子类重写父类的方法可以改变程序的行为

角色划分:

AbstractClass抽象类:负责实现模块方法,还负责声明在模板方法中所使用到的抽象方法,这些抽象方法由子类负责实现。

ConcreteClass具体类:实现具体的抽象方法。

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();
    }
}
public class CharDisplay extends AbstractDisplay {
    @Override
    public void open() {
        System.out.println("CharDisplay open");
    }

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

    @Override
    public void close() {
        System.out.println("CharDisplay close");
    }
}
public class StringDisplay extends AbstractDisplay {

    private String string;
    private int width;

    public StringDisplay(String string,int width) {
        this.string=string;
        this.width=width;
    }
    @Override
    public void open() {
        printLine();
    }

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

    @Override
    public void close() {
        printLine();
    }

    private void printLine() {
        System.out.print("+");
        for(int i=0;i<width;i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }
}
public class Main {
    public static void main(String[] args) {
        AbstractDisplay charDisplay = new CharDisplay();
        charDisplay.display();
        AbstractDisplay stringDisplay = new StringDisplay("testname",5);
        stringDisplay.display();
    }
}

结果:

CharDisplay open

CharDisplay print

CharDisplay print

CharDisplay print

CharDisplay print

CharDisplay print

CharDisplay close

+-----+

|testname|

|testname|

|testname|

|testname|

|testname|

+-----+

原文地址:https://www.cnblogs.com/use-D/p/9557722.html

时间: 2024-11-05 16:08:37

图解设计模式-Template Method模式的相关文章

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

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

图解设计模式-factory Method模式

用Template Method模式构建生成实例的工厂. 在factory method模式中,父类决定实例的生成方式,但是不决定所要生成的具体类,具体的处理交给子类负责. 角色: Product产品:它定义了在Factory Method模式中的生成的那些实例所持有的接口,由Product类扮演. Creator创建者:负责生成Product角色的抽象类,由Factory类扮演. ConcreteProduct具体产品:决定具体的产品,由IDCard类扮演. ConcreteCreator具体

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

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

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

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

设计模式(三)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模式和Strategy模式[继承与委托]

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

GOF设计模式——Factory Method模式

一.什么是Factory Method模式 Factory Method模式是用来构建生成实例的工厂,在该模式下,父类决定实例生成的方式,但并不决定所要生成的具体类.这样的设计思想,就跟Template Method模式相似(具体参考:https://www.cnblogs.com/SysoCjs/p/10327088.html或者https://blog.csdn.net/weixin_39400271/article/details/86565016),因为Factory Method模式就

【图解设计模式】Mediator模式

组员向仲裁者报告,仲裁者向组员下达指示.组员之间不再相互询问和相互指示. 示例 一个GUI应用程序,它展示了一个登录对话框,用户在其中输入正确的用户名和密码后可以登录. 可以选择作为游客访问(Guest)或是作为用户登录(Login) 作为用户登录时,需要输入正确的用户名(Username)和密码(Password) 点击OK按钮可以登录,点击Cancel按钮可以取消登录 类图 时序图 Mediator接口 1234 public interface { public abstract void

Template method模式

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