设计模式-创建型模式-模板方法(代码片段)

melovemingming melovemingming     2023-01-27     736

关键词:

设计模式-创建型模式-模板方法

定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义一个算法的步骤。

protected 对于本包及其子类可见。

类图

技术分享图片

代码

代码如下

public abstract class AbstractClass
    // 基本方法
    protected abstract void doSomething();  // 对于本包及其子类可见
    protected abstract void doAngthing();
    
    public void templateMethod()
        this.doAngthing();
        this.doSomething();
    
public class ConcreteClass1 extends AbstractClass 
    // 基本方法
    protected void doAnything()
        
    
    protected void doSomething()
        
    
public class ConcreteClass2 extends AbstractClass 
    // 基本方法
    protected void doAnything()
        
    
    protected void doSomething()
        
    

最后场景类完成调用。

public class Client
    ConcreteClass1 class1 = ConcreteClass1();
    ConcreteClass1 class2 = ConcreteClass1();
    
    // 调用模板方法
    class1.templateMethod();
    class2.templateMethod();

扩展

技术分享图片

public abstract class HummerModel
    // 能发动
    protected abstract void start();
    // 能停下来
    protected abstract void stop();
    // 会发出声响
    protected abstract void alarm();
    // 引擎会响
    protected abstract void engineBoom();
    // 模型会跑
    public final void run()
        // 发动汽车
        this.start();
        // 引擎轰鸣
        this.engineBoom();
        // 根据钩子,判断是否叫
        if (this.isAlarm())
            this.alarm();
        
        // 停车
        this.stop();
    
    // 钩子
    protected boolean isAlarm()
        return true;
    

然后扩展HummerH1Model

public class HummerH1Model extends HummerModel
    private boolean alamFlag = true;    // 默认会响
    protected void alarm()
    
    protected void engineBoom()
    
    protected void start()
    
    protected void stop()
    
    protected boolean isAlarm()
        return this.alarmFlag;
    
    // 要不要响喇叭,由客户决定
    public void setAlarm(boolean isAlarm)
        this.alarmFlag = isAlarm;
    
public class HummerH2Model extends HummerModel
    private boolean alamFlag = true;    // 默认会响
    protected void alarm()
    
    protected void engineBoom()
    
    protected void start()
    
    protected void stop()
    
    protected boolean isAlarm()
        return this.alarmFlag;
    
    // 要不要响喇叭,由客户决定
    public void setAlarm(boolean isAlarm)
        this.alarmFlag = isAlarm;
    

最后定义场景

public class Client
    public static void main(String[] args)
        // 生成一个HummerH1Model
        HummerH1Model h1 = new HummerH1Model();
        // 然后设置喇叭
        h1.setAlarm(false);
        // 启动
        h1.run();
        // 模型2
        HummerH2Model h2 = new HummerH2Model();
        h2.run();
    

总结

上方使用了一个钩子方法,即Hook Method 由一个钩子,控制了整个的运行,灰常方便。
关于父类调用子类,不建议这样做,使用如下做
把子类传递到父类的有参的构造函数中,然后调用
使用反射调用
父类调用子类的静态方法。
总结:父类建立框架,子类重写父类的部分方法,再调用从父类继承而来的结果,此为模板方法。
或者,当提供提供抽象类,并有一堆子类,需要扩展的时候,继承抽象类,覆写protected方法,然后调用execute方法,完成扩展。即可。

ts

ts没有多少类似的,故不再阐述。







python之常用设计模式(创建型模式篇)(代码片段)

Python之常用设计模式一、设计模式分类1.创建型模式工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式2.结构型模式适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式3.行为型模式解释器... 查看详情

python之常用设计模式(创建型模式篇)(代码片段)

Python之常用设计模式一、设计模式分类1.创建型模式工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式2.结构型模式适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式3.行为型模式解释器... 查看详情

设计模式之模板方法模式(行为型)(代码片段)

目录一、模式定义二、模式角色三、模式分析四、具体例子五、模式应用场景一、模式定义模板方法模式就是在一个抽象类中定义一些骨架方法,然后通过类继承的方法,将一些方法延迟到继承类里。模板方法模式是一种类行为... 查看详情

设计模式行为型模式。(代码片段)

目录1、模板方法模式模板方法模式的钩子方法模板方法模式在Spring框架应用的源码分析2、命令模式Spring框架的JdbcTemplate就使用到了命令模式3、访问者模式4、迭代器模式5、观察者模式1、模板方法模式基本介绍1)模板方法模式... 查看详情

设计模式行为型模式。(代码片段)

...,就可以重定义该算法的某些特定步骤3)这种类型的设计模式属于行为型模式。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。使用场景:1、有多个子类共有的方法,且逻辑相同。2、重要的... 查看详情

设计模式行为型模式。(代码片段)

...,就可以重定义该算法的某些特定步骤3)这种类型的设计模式属于行为型模式。主要解决:一些方法通用,却在每一个子类都重新写了这一方法。使用场景:1、有多个子类共有的方法,且逻辑相同。2、重要的... 查看详情

行为型设计模式之模板方法模式(代码片段)

模板方法模式应用场景比如:入职资料的填写,通常会有一系列的流程,只需要按照流程规则一步一步做即可。是目标方法模式的体现。主要角色1.抽象模板(AbstractClass)2.具体实现(ConcreteClass)优缺点1.将相同处理逻辑代码放到抽象... 查看详情

设计模式-创建型模式_工厂方法模式(代码片段)

文章目录创建型模式概述CaseBadImplBetterImpl(⼯⼚模式优化代码)接口定义实现奖品发放接⼝创建商店⼯⼚单元测试小结创建型模式创建型模式提供创建对象的机制,能够提升已有代码的灵活性和可复⽤性。类型实现要... 查看详情

设计模式-创建型模式_工厂方法模式(代码片段)

文章目录创建型模式概述CaseBadImplBetterImpl(⼯⼚模式优化代码)接口定义实现奖品发放接⼝创建商店⼯⼚单元测试小结创建型模式创建型模式提供创建对象的机制,能够提升已有代码的灵活性和可复⽤性。类型实现要... 查看详情

设计模式-行为型模式-模板方法模式(templatemethod)(代码片段)

行为型-模板方法模式  个人理解,通俗的说,就是我们将实现某功能的模板写好,其中实现这个功能的具体步骤可以抽离出来,由子类来写具体的实现。  其实抽象类就体现了模板方法这个思想,抽象类将子类需要实现的... 查看详情

设计模式行为型模式--模板方法模式(定义示例jdk源码解析inputstream)(代码片段)

1.模板方法模式概述2.模板方法模式定义3.模板方法模式结构4.【例】炒菜炒菜的步骤是固定的,分为倒油、热油、倒蔬菜、倒调料品、翻炒等步骤。现通过模板方法模式来用代码模拟。类图如下:代码如下:AbstractClass... 查看详情

designpattern-模板方法模式行为型(代码片段)

...迎关注微信公众号:FSA全栈行动👋一、模板方法模式介绍模板方法模式(TemplateMethod)定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法... 查看详情

设计模式-模板方法模式(15)(代码片段)

 行为型模式(BehavioralPattern)是对不同的对象之间划分责任和算法的抽象化。行为型模式包括11种模式:模板方法模式、命令模式、责任链模式、策略模式、迭代器模式、中介者模式、观察者模式、备忘录模式、访问者模式... 查看详情

设计模式行为型模式模板模式(代码片段)

概念模板模式定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式。让子类在不改变算法架构的情况下,重新定义算法中的某些步骤。抽象摸板角色:(抽象父类)定义了一个或多个抽象操作,以便让子类实现定义... 查看详情

从零开始学习java设计模式|行为型模式篇:模板方法模式(代码片段)

接下来,我们来学习第四章的内容,即行为型模式。简单聊聊行为型模式首先,我们来看一看什么是行为型模式。行为型模式用于描述程序在运行时复杂的流程控制(我们之前学习过很多流程控制语句,例如if... 查看详情

从零开始学习java设计模式|行为型模式篇:模板方法模式(代码片段)

接下来,我们来学习第四章的内容,即行为型模式。简单聊聊行为型模式首先,我们来看一看什么是行为型模式。行为型模式用于描述程序在运行时复杂的流程控制(我们之前学习过很多流程控制语句,例如if... 查看详情

创建型模式---工厂模式(代码片段)

...定义又称为静态工厂方法(StaticFactoryMethod)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。... 查看详情

设计模式-创建型模式(代码片段)

1.1创建型模式AbstractFactory(抽象工厂)FactoryMethod(工厂方法)Singleton(单态模式)Builder(建造者模式)Protot*pe*原型模式)1.1.1工厂方法    意义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例... 查看详情