`
悲剧了
  • 浏览: 144443 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

N个if+else跟策略模式&&状态模式

阅读更多
  坛子里面有很多帖子,提到说怎么解决if else过来带来的判断问题,每次这个一出来,下面回帖都是策略模式 状态模式

但实际真能解决吗?

先说状态模式吧



  如图,现在有平行的三个策略,但是使用哪个策略是在context里面决定的,那么if else 有替换吗?

只不过if else 里面的东西被封住了,if else 什么的还是在那摆着

再说状态模式





   状态模式关键在context里面有一个保存状态的东西,然后调用request方法,下面的A,B类是不是平行的,不可替换的,他们对应不同状态,那到底什么状态,在context里面还是得判断,然后调用不同状态的handle
if else 在也没解决,只不过把需要判断的内容要你在其它地方判断好,这里直接set对应状态





个人理解:策略是处理方式有多种,都是平行的,用if else选择执行哪种
状态也有多种,不同状态对应处理不同,但不能替换不是平行的原因是由于在context调用时候,已经set它的状态了

这只是简单运用模式,比如状态模式模拟工作流的时候,一个状态处理,对应状态改变,然后更加状态的改变再调用不同的状态处理


  • 大小: 4.9 KB
  • 大小: 16.1 KB
分享到:
评论

相关推荐

    二十三种设计模式【PDF版】

    o m m u n i c a t i n go b j e c t)的重复模式。这些模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复用性更 好。它们帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。 一个...

    opp设计模式

    根据提供的文件信息,我们可以深入探讨几种重要的面向对象编程(Object-Oriented Programming,简称 OPP)设计模式:策略模式(Strategy Pattern)、单例模式(Singleton Pattern)、工厂模式(Factory Pattern)、...

    ACM、NOI和CSP在算法和数据结构方面,一些经验分享和代码例程.docx

    } else if (i < N && pat[j] != txt[i]) { if (j != 0) j = lps[j-1]; else i = i+1; } } } ``` 以上提供的代码例程仅为示例,具体的实现细节可能会因具体题目需求和使用的编程语言而有所不同。在比赛中,...

    算法设计回溯法

    if k = n then output(x1, x2, ..., x_k) // 输出一个解答 else k := k + 1; else k := k - 1; // 回溯 until k = 0; } ``` 2. **迭代实现**: ```pseudocode void IterativeBacktrack() { int t = 1; ...

    蓝桥杯Java试题汇总-共48页.docx

    都遵循一个模式:每个新字符串都是在前一个字符串末尾添加当前的序号,再在前面加上`AB`。可以观察到,每次增加的字符串部分是`AB`加上当前的序号。因此,我们可以通过递归或循环结构来生成第N个字符串。在Java中,...

    算法设计与分析:2-Lec6-EditDistance.pdf

    在后续的课程中,我们会多次看到类似的模式:创建一个表格来记录问题的状态,并重用子问题的解。 #### 字符串编辑距离(String Edit Distance) 字符串编辑距离是用来衡量两个字符串(序列)之间的“距离”的一种...

    PHP 5 dvanced OOP and Design Patterns

    - **策略模式**:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。 - **观察者模式**:当对象的状态发生改变时,通知所有依赖它的对象。 - **装饰器模式**:动态地给一个对象添加新的责任。 #### ...

    5-元胞自动机matlab程序

    通过读取这些数据并结合MATLAB的图形界面工具(如`imshow`或`imagesc`),可以可视化地展示车流变化情况,从而分析交通流量的模式和潜在的优化策略。 总结来说,5-元胞自动机是一种强大的建模工具,能够通过简单的...

    Golang TCP粘包拆包问题的解决方法

    4. **状态机模式**:通过维护一个状态机,根据接收到的数据逐步更新状态,直到达到某个条件(如读取到特定的数据或满足某个长度)才认为接收到一个完整的消息。这种方法适用于复杂情况下的数据解析。 #### 五、代码...

    c#多线程抓取网页内容

    - **URL分配**:每个线程从表中申请一个未下载的URL进行抓取,并更新表中的状态信息。例如: ```csharp string cfullname = "ctablename.dbf"; USE (cfullname); GO TOP; LOCATE FOR (EMPTY(ALLTRIM(ctext)) ...

    [转帖] 用C# Generator解决Hanoi塔问题

    这种编程模式不仅适用于Hanoi塔,还可以应用于其他许多需要生成一系列步骤或结果的场景,如模拟游戏状态、生成图形路径等。理解并掌握Generator的使用,对于提升C#编程能力,特别是处理复杂逻辑和优化性能方面具有...

    JAVA游戏――(源代码+详细注释)大富翁.rar

    9. **设计模式**:大富翁游戏可能运用到一些设计模式,如单例模式(用于全局唯一的游戏对象),工厂模式(用于创建不同类型的格子或事件),策略模式(用于不同的游戏策略)等。 10. **测试与调试**:游戏开发过程...

    TCPIPWinsock网络编程综述[参考].pdf

    TCP/IP Winsock网络编程是软件开发中的一个重要领域,特别是在构建网络应用程序时。Winsock是Windows操作系统提供的接口,允许开发者使用TCP/IP协议进行通信。本篇综述主要关注如何高效地利用Winsock进行同步网络...

    个人笔记--JAVA基础

    ifelse语句** - 双分支结构,如果条件成立则执行if块,否则执行else块。 - **2.7.3. If……elseif……else语句** - 多分支结构,根据多个条件执行不同的代码块。 - **2.7.4. 嵌套的if语句** - 在一个if语句中...

    web前端小测验

    根据提供的文件信息,我们可以从中提炼出以下几个主要的知识点: ### 1. JavaScript 原型链及作用域 **题目**: `A.prototype.name` 的值是什么? **解析**:此题涉及JavaScript中的原型链概念。在JavaScript中,...

    数据结构期末考试真题

    if (head == tail) { // 只有一个元素 head = tail = null; } else { head = head.next; head.prev = tail; tail.next = head; // 保持循环 } return data; } } ``` ##### 2. 根据以下算法: ``` MERGE(A,...

    c# 搬山游戏 小程序

    1. **山的数量(n)**:游戏中的山峰代表了游戏的状态空间,可以是任意正整数,每座山都有一个特定的高度。 2. **最大移动数量(k)**:每次操作时,玩家或计算机可以选择移动不超过k座山。这个限制增加了游戏的策略...

    群体智能优化算法-鱼群优化算法

    \text{else if after try_num times still not satisfied, then } X_i = X_i + \text{Step} \cdot \text{Rand}(-1, 1) \] 2. **群集行为(AF_Swarm)**:为了提高生存几率,鱼类倾向于聚集在一起。在算法中,人工...

    MATLAB简单飞行器模拟笔记.md

    - **方法**:利用MATLAB中的MPC工具箱来设计多个MPC控制器,每个控制器适用于特定的飞行模式(如起飞、巡航、降落等)。 - **代码示例**: ```matlab % 设计MPC控制器 mpc_takeoff = mpc(sys, 0.1); % 起飞模式 ...

Global site tag (gtag.js) - Google Analytics