【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则是由一群没有任何关系的类所组成,不知彼此的存在
文章整理自书籍《设计模式与游戏完美开发》 菜升达 著
【Unity3D与23种设计模式】策略模式(Strategy)的更多相关文章
- 24种设计模式-策略模式(Strategy Pattern)
一.优点: 1. 策略模式提供了管理相关的算法族的办法.策略类的等级结构定义了一个算法或行为族.恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码. 2. 策略模式提供了可以替换继承关系的 ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- 设计模式--策略模式(strategy)
1.策略模式(strategy ['strætədʒi]) 我的理解是:方案候选模式 (反正关键就是有很多的候选,哈哈) 看了很多例子,都是在说鸭子的,那个例子很好,在这里可以看 他们生产鸭子,我们就 ...
- 设计模式 - 策略模式(Strategy Pattern) 具体解释
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...
- 24种设计模式--策略模式【Strategy Pattern】
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜赔了夫人有折兵呀,那咱们先看看这个场景是什么样子的. 先说这个场景 ...
- java设计模式 策略模式Strategy
本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...
- 设计模式——策略模式(Strategy Pattern)
写在前面: 直接将书中的例子用来作为记录自己学习的成果,不知道这样好不好,如果给原作者带来什么不利的影响不妨告知一声,我及时删掉. UML图: 抽象策略:Strategy package com.cn ...
- 设计模式-策略模式Strategy以及消灭if else
概述 如果在开发过程中,出现大量的if else或者switch case 语句,如果这些语句块中的代码并不是包含业务逻辑,只是单纯的分流方法,那么,每一个语句块中都是一个算法或者叫策略. 背景 比如 ...
- 大话设计模式--策略模式 strategy -- C++实现实例
1. 策略模式: 它定义了算法家族, 分别封装起来,使他们之间可以相互替换,此模式让算法变化, 不会影响到使用算法的客户. 用相同的方法调用不同的算法,减少各种算法类与使用算法类之间的耦合. 实例中策 ...
随机推荐
- hdu1061(2015-N1):1.快速幂;2.找规律
1.快速幂 原理:求a的b次方,将b转化为二进制数,该二进制位第i位的权是2^(i-1), 例如 11的二进制是1011 11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1 因此,我们将a¹ ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 简介 这是一篇关于Redis使用的总结类型文章,会先简单的谈一下缓存 ...
- orcale和hive常用函数对照表(?代表未证实)
函数分类 oracle hive 说明 字符函数 upper('coolszy') upper(string A) ucase(string A) 将文本字符串转换成字母全部大写形式 lower('K ...
- linux Cacti监控服务器搭建
搭建Cacti监控服务器 部署安装环境(lamp) [root@zhuji1 ~]# yum -y install httpd [root@zhuji1 ~]# yum -y install php ...
- php 递归无线级别分类
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <?ph ...
- hql查询实例
1.设计思路 (1)在页面中设计一个下拉框,数据取自数据库: (2)查询是用hql查询. 2.设计实例 (1)Java模型层 public class Tree { private String id ...
- Conditional Random Fields (CRF) 初理解
1,Conditional Random Fields
- pat1111-1120
1111 比较麻烦的最短路 #include<cmath> #include<map> #include<iostream> #include<cstring ...
- CF374 Maxim and Array
贪心 如果有0先变成非0 如果负数的个数 应该变为偶数 之后就是每次将绝对值最小的值加K #include<bits/stdc++.h> using namespace std; cons ...
- JSP页面输出九九乘法表--JSP基础
index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="U ...