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

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

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){// 生成一个HummerH1ModelHummerH1Model h1 = new HummerH1Model();// 然后设置喇叭h1.setAlarm(false);// 启动h1.run();// 模型2HummerH2Model h2 = new HummerH2Model();h2.run();}
}

总结

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

ts

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

设计模式-创建型模式-模板方法相关推荐

  1. 七大设计原则与设计模式(创建型模式、结构型模式、行为型模式)

    七大设计原则 开闭原则.依赖倒置原则.单一职责原则.接口隔离原则.迪米特法则(最少知道原则).里氏替换原则.合成 (组合).聚合复用原则 开闭原则 定义: 一个软件实体如类.模块和函数应该对扩展开放, ...

  2. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  3. 设计模式-创建型模式-建造者模式

    设计模式-创建型模式-建造者模式 建造者模式即生成器模式,将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 代码如下 // 产品类 public class Product{pu ...

  4. 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...

  5. 设计模式-创建型模式-抽象工厂模式

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

  6. 设计模式-创建型模式-简单工厂模式

    工程地址:设计模式-简单工厂源码-C++文档类资源-CSDN下载C++设计模式-创建型模式-简单工厂模式源码更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn.n ...

  7. 设计模式-创建型模式-工厂方法模式

    工程源码:c++设计模式-创建型模式-工厂方法模式https://download.csdn.net/download/qq_40788199/85541617 码云:https://gitee.co ...

  8. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

  9. 设计模式---创建型模式

    一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...

最新文章

  1. js、css分别实现元素水平垂直居中
  2. 数据类型介绍和表的创建
  3. 高通首次演示基于3GPP的5G新空口连接 有望成为全球标准
  4. 检测洛达芯片的软件_购买华强北洛达1562a的10条须知!!!快来看!!!
  5. 用 JSON和userData 更全面的模拟 localStorage
  6. [AndroidO] [RK3399] -- CH341驱动移植
  7. Wlan学习备忘(上)
  8. 前端对接钉钉的步骤以及代码
  9. 安全管理实务之四:口令管理(转)
  10. 解决安装PyMySQL一直停在Building wheels for collected package:cryptography, cffi, pycparser的问题...
  11. [Chatter] : 以形写神
  12. 摄影测量中的什么是光流场_摄影中的“停止”是什么?
  13. 人生没有白读的书,每一本都算数~
  14. 网络版AIS接收机SLR350N
  15. 解决TraceCompass网站打不开和Stackoverflow显示不全的问题
  16. JWT认证方式之-System.IdentityModel.Tokens.Jwt
  17. OIM实现OIM用户修改、OIM用户Disable流程审批
  18. Linux UDP相关
  19. 与江南姑娘一起采茶去
  20. Worldwind配置文档

热门文章

  1. Ember.js 入门指南——路由重定向
  2. android设置图片自适应控件大小
  3. mysql示例employees数据库
  4. 用Win XP接收传真
  5. eclipse(jee) 配置Tomcat
  6. 网络(15)-粘包拆包,Netty解决方案及远洋通信中的解决方案!超实用
  7. JDK1.8简单配置环境变量---两步曲
  8. 华为c8818刷原生Android 6,华为C8818(电信4G)一键救砖教程,轻松刷回官方系统
  9. 信号与系统 matlab实验报告,信号与系统 MATLAB实验报告
  10. javascript this 详解