设计模式(2)--状态模式

在这里插入图片描述
在这里插入图片描述
初试“自动机”设计
加入一个状态,问题出现

  1. 设计不是面向对象的。
  2. 状态转换不清晰,多条条件分支语句
  3. 没有封装变化
  4. 没遵循开闭原则
  5. 进一步的增加状态会导致bug

新设计

将状态封装到各自类中,当动作发生时委托给当前状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Intent动机

允许对象在内部状态改变时,改变他的行为,对象看起来好像修改了它的类。

跟策略模式对比

1、意图不同:策略模式是定义一个算法家族,将他们封装起来,使得他们之间可以相互替换。 状态模式是将一个个状态封装成一个个类,当内部状态发生改变时,改变他们的行为。
2、策略模式和状态模式的类图几乎一样
3、策略模式中,客户端知道具体的策略有哪些,客户端能够通过setStrategy方法来动态地设置具体使用哪个策略,而状态模式中,客户端不知道内部是怎么变化的,状态模式通过状态的转换来组合state对象,最后把行为呈现出来。

Review

  • 和状态机不同,状态模式用类来代表状态。
  • context会将行为委托给当前对象
  • 状态转换可以有state控制也可以由context控制。
  • (缺点)会导致设计中类的数目大大增加。
  • 策略模式通常用行为或算法装配context类
  • 状态模式允许context随着状态的改变而转换行为。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值