zoukankan      html  css  js  c++  java
  • 【Unity3D与23种设计模式】策略模式(Strategy)

    GoF中定义:

    “定义一组算法,并封装每个算法,让它们之间可以彼此交换使用。

    策略模式让这些算法在客户端使用它们时能更加独立。”

    游戏开发过程中

    不同的角色会有不同的属性计算方法

    初级解决方法便是:if else,不够再来几个if else

    高级点儿的就用switch case配合enum

    对于小型项目或者快速开发验证用的项目而言,这么做是没问题的

    但是开发规模或产品化项目时,最好还是选择策略模式

    在策略模式中,

    算法中的每一个都应该独立出来

    将计算细节加以封装

    客户端只要根据情况来选择对应的算法即可

    至于具体的计算方式及规则,客户端便不需理会

    using UnityEngine;
    
    public abstract class Strategy {
         public abstract void AlgorithmInterface();
     }
    
    public class StrategyA : Strategy {
         public override void AlgorithmInterface()
         {
             Debug.Log("StrategyA.AlgorithmInterface");
         }
     }
    
    public class StrategyB : Strategy
     {
         public override void AlgorithmInterface()
         {
             Debug.Log("StrategyB.AlgorithmInterface");
         }
     }
    
    public class StrategyC : Strategy
     {
         public override void AlgorithmInterface()
         {
             Debug.Log("StrategyC.AlgorithmInterface");
         }
     }
    
    public class Context {
         Strategy m_Strategy = null;
    
        public void SetStrategy(Strategy theStrategy) {
             m_Strategy = theStrategy;
         }
    
        public void ContextInterface() {
             m_Strategy.AlgorithmInterface();
         }
     }

    策略模式与状态模式非常相似

    在GoF中,两者都被归类在行为模式(Behavioral Patterns)分类下

    都是由一个Context类来维护对象引用

    并借此调用提供功能的方法

    不同点在于:

    State是一群状态中进行切换,状态之间有对应和链接的关系

    Strategy则是由一群没有任何关系的类所组成,不知彼此的存在

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

  • 相关阅读:
    【hibernate】自定义转换器
    【hibernate】存储图片
    【hibernate】映射可嵌入式组件
    【hibernate】应用程序级别的视图
    adb shell模拟点击事件(input tap)
    Android UIAutomator 定位
    adb devices连接不上设备
    获取元素属性get_attribute
    wait_activity
    webview定位 & native和webview切换
  • 原文地址:https://www.cnblogs.com/fws94/p/7206789.html
Copyright © 2011-2022 走看看