模板模式

模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去实现。

几个要点,针对java:

  1. 抽象父类(防止实例化),公共方法(public),规定好工作流
  2. 抽象父类规定好抽象方法(protected),具体由子类实现,父类将抽象方法加入自己的工作流
  3. 具体子类实现父类的抽象方法
  4. 任意实例化的子类,都会按照父类工作流工作,只是部分(抽象方法实现)不同
abstract class Handle{public void handle(){a();b();c();}void a(){}void c(){}protected abstract void b();}class Handle1 extends Handle{@overrideprotected override void b(){Console.WriteLine("Handle1");}}class Handle2 extends Handle{@overrideprotected override void b(){Console.WriteLine("Handle2");}}

调用:

Handle handle=new Handle1();
handle.handle();

任意子类都会按照规定的工作流a()->b()->c()执行,部分(b方法)由具体子类去定义。

策略模式

针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

public interface ICalculator {  public int calculate(int a,int b);
}
public class Plus implements ICalculator {  @Override  public int calculate(int a,int b) {  return a+b;  }
}
public class Minus implements ICalculator {  @Override  public int calculate(int a,int b) {  return a-b;  }
}Class Calculator{ICalculator calculator;public Calculator(ICalculator calculator){this.calculator=calculator;}public int calculate(int a,int b){return calculator.calculate(a,b);}
}当需要加法计算时:
Calculator plusCalculator=new Calculator(new Plus());
int result=plusCalculator.calculate(3,5);

策略模式的决定权在用户,系统本身提供不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用户只需要决定用哪个算法即可。

策略模式和模板模式场景对比:

策略模式的应用场景
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),一般会定义一个接口规范,使用不同的策略方式去实现它
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
而模版方法模式的应用场景
1、多个类区别在于主流程中的某个细节
2、客户可以自已实现模版里的抽象方法
3、对客户隐藏具体的实现流程(方法的组合的顺序)

参考这里
参考这里

转载于:https://www.cnblogs.com/lknny/p/5759152.html

模板模式与策略模式/template模式与strategy模式/行为型模式相关推荐

  1. 设计模式学习之策略模式(Strategy,行为型模式)(13)

    转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...

  2. 【设计模式】三大类:创建型模式、结构型模式、行为型模式

    1 创建型模式 本人理解:以C++为例,创建对象时,用关键字new来创建(实例化)对象.用一个函数或类将new的过程封装起来,就是创建型模式. <设计模式>中的描述: 创建型模式抽象了实例 ...

  3. 设计模式之创建型模式(工厂、原型、建造者)

    文章目录 创建型模式 2.1 工厂设计模式 2.1.1 简单工厂模式 2.1.2 工厂方法模式 2.1.3 抽象工厂 2.1.4 工厂模式总结 2.1.5 Spring中的工厂模式 2.1.6 工作中 ...

  4. 创建型、结构型、行为型模式(1)

    来源:http://blog.csdn.net/wulingmin21/article/details/6753363 目的 创建型模式 Creational Pattern 结构型模式 Struct ...

  5. 备战面试日记(3.2) - (设计模式.23种设计模式之创建型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.6 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  6. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  7. 设计模式--行为型模式

    本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:设计模式之创建型模式(附实例和详解). 设计模式之结构型模式(附实例和详解). 行为型模式细分为如下11种:策略模式.模板方法模式 ...

  8. java创建型_Java创建型模式

    Java创建型模式 在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象.基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度.创建型模式通过以某种方式控制 ...

  9. 软件设计与体系结构——创建型模式

    如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔的个人空间 创建型模式: 创建型模式抽象了实例化过程 帮助系统独立于如何创建.组合和表示对象 一个类创建型模式使用继承改变被实例化的类 类创建型 ...

  10. 《Android之大话设计模式》--设计模式 创建型模式 第五章:原型模式

    原型模式应用场景举例:  GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让 MM有些不高心,MM说回复信息 ...

最新文章

  1. 据说是Jack Wu的自定义函数!烂
  2. FIFO的verilog代码
  3. 英语口语海报演讲--东软
  4. mysql8.0 的新特性_MySQL8.0-新特性汇总
  5. 带你入门SpringCloud 之 通过SpringCloud Bus 自动更新配置
  6. python全栈开发_day42_数据库6
  7. shell基础之EOF的用法
  8. 关于RUP的一点见解,针对于近期的面向对象方法课程
  9. truffle Migration是什么
  10. python四种可变类型_python中可变类型与不可变类型 + 类型转换
  11. 提高生产力,这4款设计软件能自动生成代码
  12. [关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱
  13. 图片怎么去水印?大神教你3个免费去水印方法
  14. Vue3中setup前写async页面不显示
  15. 关于python数字的一种下划线奇怪写法
  16. 理解条件概率的链式法则
  17. 浅谈MYSQL增量备份
  18. 阶梯下降法,房价问题
  19. buuoj Pwn writeup 106-110
  20. Linux she 39 ll,linux_shell 编程学习-初识she'll

热门文章

  1. Tensorflow的快速安装(张量图例)
  2. 兰州职称计算机中心,【兰州2013年职称计算机考试报名通知】- 环球网校
  3. Linux内核态之间进程通信,Linux 系统内核空间与用户空间通信的实现与分析[转载]...
  4. java高并发多线程架构_《Java高并发编程详解-多线程架构与设计》线程安全与数据同步...
  5. 结对-五子棋游戏-开发环境搭建过程
  6. maven入门(7)maven项目(组件)的坐标
  7. Java Web学习总结(23)——Distributed Configuration Management Platform(分布式配置管理平台)...
  8. 利用tar 通过网络拷贝数据
  9. PAT1057. 数零壹
  10. c++学习笔记(4)