• 【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则是由一群没有任何关系的类所组成,不知彼此的存在

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

  • 相关阅读:
    Bootstrap学习js插件篇之提示框
    动态装载外部JavaScript脚本文件
    Bootstrap学习js插件篇之滚动监听
    ASP.NET 仿腾讯微博提示“还能输入*个字符”的实现
    Javascript 操作 Sql中的Xml 字段
    Bootstrap学习js插件篇之标签页
    CSS垂直水平完全居中手册
    Bootstrap学习js插件篇之下拉菜单
    国庆大礼包:2014年最全的ANDROID GUI模板和线框图免费下载
    网上收集:跟着 8 张思维导图学习 Javascript【转】
  • 原文地址:https://www.cnblogs.com/fws94/p/7206789.html
Copyright © 2020-2023  润新知