zoukankan      html  css  js  c++  java
  • 【Unity3D与23种设计模式】模板方法模式(Template Method)

    GoF中定义:

    “在一个操作方法中定义算法的流程,其中某些步骤由子类完成。

    模板方法模式让子类在不变更原有算法流程的情况下,还能够重新定义其中的步骤”

    每一次武器攻击目标时,都要按逻辑执行:

    1.开火、枪口特效

    2.子弹特效

    3.武器特效

    4.通知敌方被击中

    而每一种武器(如:枪,炮)都要执行一遍相同顺序的逻辑

    模板方法模式就是着手解决这个问题的

    1.定义一个算法的流程,即是很明确地定义算法的每一个步骤,并写在父类的方法中,而每一个步骤都可以是一个方法的调用

    2.某些步骤由子类完成,不同子类的特性计算在此实现

    //TemplateMethod.cs
    public abstract class AbstractClass {
        public void TemplateMethod() {
            PrimitiveOperation1();
            PrimitiveOperation2();
        }
        protected abstract void PrimitiveOperation1();
        protected abstract void PrimitiveOperation2();
    }
    
    public class ConcreteClassA : AbstractClass {
        protected override void PrimitiveOperation1()
        {
            Debug.Log("ConcreteClassA.PrimitiveOperation1");
        }
        protected override void PrimitiveOperation2()
        {
            Debug.Log("ConcreteClassA.PrimitiveOperation2");
        }
    }
    
    public class ConcreteClassB : AbstractClass
    {
        protected override void PrimitiveOperation1()
        {
            Debug.Log("ConcreteClassB.PrimitiveOperation1");
        }
        protected override void PrimitiveOperation2()
        {
            Debug.Log("ConcreteClassB.PrimitiveOperation2");
        }
    }
    //TemplateMethodTest.CS
    void UnitTest() {
        AbstractClass theClass = new ConcreteClassA();
        theClass.TemplateMethod();
    
        theClass = new ConcreteClassB();
        theClass.TemplateMethod();
    }
    //测试结果
    ConcreteClassA.PrimitiveOperation1
    ConcreteClassA.PrimitiveOperation2
    ConcreteClassB.PrimitiveOperation1
    ConcreteClassB.PrimitiveOperation2

    文章整理自书籍《设计模式与游戏完美开发》 菜升达 著

  • 相关阅读:
    记ByteCTF中的Node题
    Hooks中的useState
    IntersectionObserver对象
    Service Worker的应用
    使用 SpringBoot 构建一个RESTful API
    创业和技术有什么相通的“底层逻辑”?
    SpringBoot Profiles 多环境配置及切换
    SpringBoot Logback 日志配置
    应用分层和领域模型规约
    SpringBoot 整合 MyBatis,实现 CRUD 示例
  • 原文地址:https://www.cnblogs.com/fws94/p/7211256.html
Copyright © 2011-2022 走看看