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

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

  • 相关阅读:
    项目目标文档
    系统利益相关者描述案例
    软件需求模式 读书笔记二
    软件需求分析 读书笔记1
    专业实训题目需求分析
    2015年秋季个人阅读计划
    CodeVs 1615 数据备份
    HDU 3900 Unblock Me
    HDU 5898 odd-even number
    HDU 5877 Weak Pair
  • 原文地址:https://www.cnblogs.com/fws94/p/7211256.html
Copyright © 2011-2022 走看看