一.什么是设计模式?
设计模式是一套被反复使用,多数人知晓的,经过分类编目的、代码设计经验的总结。
二.什么是状态设计模式?
状态设计模式是GoF(Design Patterns: Elements of Reusable Object-Oriented
Software)一书中提出的最吸引人的模式之一,也是最有用的一种模式,游戏通常就采用
状态模式,因为游戏中的对象往往会非常频繁的改变状态.
补述:后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和
John Vlissides 合著(Addison-Wesley,1995)。
这几位作者常被称为"四人组(Gang of Four)",
这本书也就被称为"四人组(或 GoF)"书。
在《设计模式》这本书的最大部分是一个目录,
该目录列举并描述了 23 种设计模式。
三.状态模式的作用?
1.状态模式的作用就是允许对象在状态改变时改变其行为.
2.用大白话来说,就如我们房间里的灯是一个接口,有两个状态,就是两个属性,灯开着
和灯关着.那么我们可以定义为一个状态接口.再创建开灯,关灯去实现这个状态接
口,就得到了开灯类和关灯类.
那么,我们想开灯的时候就访问开灯接口,想关灯的时候就访问关灯接口.
四.状态模式的组成
环境类(Context): 定义客户感兴趣的接口。维护一个ConcreteState子类的实例,
这个实例定义当前状态。
抽象状态类(State): 定义一个接口以封装与Context的一个特定状态相关的行为。
具体状态类(ConcreteState): 每一子类实现一个与Context的一个状态相关的行为。
五:撸代码时,什么时候该用状态模式(State模式)呢?
1.State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理
操作的问题。
解决这种问题,最一般的方法是采用switch-case语句或者if-else语句进 行处理的,
这样会造成一个问题:分支过多.
而且如果加入一个新的状态就需要对原来的代码进行繁琐的编译。
什么繁琐的编译呢?
就是我想让灯有发热的功能,变成日光灯.
如果不用状态模式,我就得重新定义灯的属性,再判断这个灯关着能不能发热啊?
开着能不能不发热啊?等等等等
2.State模式采用了对这些不同的状态进行封装的方式处 理这类问题,
当状态改变的时候进行处理然后再切换到另一种状态,
也就是说把状态的切换责任交给了具体的状态类去负责.
就比如我想开灯的时候直接调用开灯这个状态接口,想关灯就直接调用关灯这个接口.
想发热呢?直接调用发热这个接口.
六:State模式的优点?
通过上述举例,相信大部分同学可以理解这个模式的优点了,能将复杂的逻辑判断简
化.我就直接说缺点吧
七.State模式的缺点?
定义了太多的系统类,和对象的个数.这是大多数设计模式的缺点.如果使用不当讲导
致程序结构和代码的混乱
当然这句话等于白说啊,我if else使用不当代码也会混乱...
末尾:移动互联&人力资源交流群,可加微信zy666128入群交流。
image.png
网友评论