首页 > 其他分享 >策略模式和模版方法有什么区别

策略模式和模版方法有什么区别

时间:2023-12-29 12:12:25浏览次数:21  
标签:策略 区别 模版 模式 算法 子类 方法 模板

策略模式(Strategy Pattern)和模板方法模式(Template Method Pattern)是两种不同的设计模式,它们在实现上有一些明显的区别:

  1. 目的和应用场景:

    • 策略模式: 主要用于定义一系列的算法,将每个算法封装起来,并使它们可以互相替换。客户端可以选择不同的策略对象,以达到不同的行为。
    • 模板方法模式: 主要用于定义一个算法的骨架,将一些步骤的实现延迟到子类。父类中定义了模板方法,该方法中的某些步骤的具体实现由子类决定。
  2. 关注点:

    • 策略模式: 关注的是算法的替换和客户端的选择。
    • 模板方法模式: 关注的是算法的骨架和具体步骤的延迟实现。
  3. 组成结构:

    • 策略模式: 主要包含环境类(Context)、策略接口(Strategy)和具体策略实现类(ConcreteStrategy)。
    • 模板方法模式: 主要包含抽象类(AbstractClass)、模板方法(Template Method)和具体实现步骤的方法。
  4. 灵活性和扩展性:

    • 策略模式: 策略可以相对独立地变化,客户端可以灵活地选择和切换不同的策略。
    • 模板方法模式: 算法的骨架是固定的,但某些步骤的具体实现可以在子类中进行扩展。
  5. 调用方式:

    • 策略模式: 客户端通常主动选择并设置具体的策略对象。
    • 模板方法模式: 算法的执行是由父类的模板方法触发的,子类可以通过扩展来影响某些步骤的具体实现。

总的来说,策略模式关注的是定义一系列算法并使它们可以互相替换,而模板方法模式关注的是定义一个算法的骨架,将某些步骤的实现交给子类决定。它们分别适用于不同的设计需求和场景。

标签:策略,区别,模版,模式,算法,子类,方法,模板
From: https://www.cnblogs.com/guoyu1/p/17934610.html

相关文章

  • %和&区别
    在 Java 8(以及其他版本的 Java)中,&(按位与)和 %(取模)是两种完全不同的运算符,它们在大多数情况下给出不同的结果。然而,在某些特定情况下,它们的结果可能会相同。这种情况主要发生在涉及特定数值的操作中。何时结果相同当 % 运算的除数是 2 的幂时(例如 2, 4, 8, 16 等),并且被......
  • js里URL编码的不同方法和区别
    总结:1.escape/unescape这两个方法不能用于URL编码,但有很多人用,特此指出,因为它的真正作用是返回一个字符的Unicode编码值,不会对"+"进行编码,但是我们知道,网页在提交表单的时候,如果有空格,则会被转化为+字符。服务器处理数据的时候,会把+号处理成空格。2.encodeURI/decodeURI......
  • 程序员必知!适配器模式的实战应用与案例分析
    适配器模式是一种结构型设计模式,它允许不同接口的对象协同工作,它通过将一个类的接口转换成客户希望的另外一个接口,使得不兼容的类可以一起工作。适配器模式提高了类的复用性、系统的灵活性和可扩展性,并降低了系统间的耦合度,在实际应用中,例如电源适配器和数据转换器,以及编程中封装......
  • js设计模式之工厂模式
    原型链实现letUserFactory=function(role){if(thisinstanceofUserFactory){lets=newthis[role]returns}else{returnnewUserFactory(role)}}UserFactory.prototype={SumperAdmin:function(){this.name="......
  • 协程的分类与真假协程的区别
    协程可以按执行类型分为三大类:生成器协程(GeneratorCoroutines)、无栈协程(StacklessCoroutines)和有栈协程(StackfulCoroutines)。1.生成器协程(GeneratorCoroutines):生成器协程是一种在函数执行期间可以暂停和恢复的特殊函数。它使用生成器函数和yield关键字来实现。生成器协......
  • redis哨兵模式
    在主从架构的基础上继续增加三个哨兵当前架构:1主2从3哨兵启动顺序:redis主节点-从节点1-从节点2-哨兵依次启动(redis-sentinelsentinel-26380.cong)测试情况如下:主节点死掉,三哨兵自动选举新的主节点,除非所有节点挂掉哨兵模式配置文件:port26380//当前哨兵端口26380daem......
  • 【Unity百宝箱】游戏中的观察者模式
    【Unity百宝箱】游戏中的观察者模式原创 打工人小棋 打工人小棋 2023-04-2713:35 发表于广东Hi,大家好,我是游戏区“bug主”打工人小棋! 今天我想和大家聊一聊游戏中的观察者模式~近两期视频,都是在为下一期视频做准备,在下期视频中,大家将会看到用户数据存储、以......
  • C#单例模式示例
    示例一:publicclassSpiderService{privatestaticSpiderServiceinstance;publicstaticSpiderServiceInstance{get{if(instance==null){instance=newSpiderService();......
  • Java-继承:重载与重写的区别
    一、重写(Override)子类继承父类,子类重写父类中的所有公共方法,覆盖父类的方法并对其重写。注意事项:重写前后方法名相同;参数列表相同;返回值相同子类重写的方法所抛出的异常必须与父类中的被重写方法的异常一致,或者不能比父类的异常范围更大。父类的私有方法不能被重写,如果子类非要......
  • 什么是意向锁?它和意向书有什么区别?
    最近受废话文学的影响,所以有了今天的这个标题,希望大家能喜欢。大家不喜欢也没关系,反正我喜欢。鲁迅先生曾经说过“我家门前有两棵树,一棵是枣树,另一棵还是枣树。”,由此可见,这老爷子算是把废话文学给玩明白了。希望大家也能,听君一席话,如听一席话吧。聊正题聊完闲篇,咱们说回正题......