[设计模式]State模式
《Java与模式》
又称状态对象模式。状态模式是对象的行为模式。GOF95
一个对象的行为取决于一个或者多个动态变化的属性,这样的属性叫做状态。这样的对象叫做有状态的对象(stateful)。
状态模式把一个所研究的对象的行为包装在不同的状态对象中,每一个状态对象都属于一个抽象状态的一个子类。
状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。
模式所涉及的对象包括:
1. 抽象状态角色,state,定义一个接口,用以封装环境,context对象的一个特定的状态所对应的行为。
2. 具体状态, concreteState角色,每一个具体状态类都实现了黄精的一个状态所对应的行为
3. 环境角色,context,定义客户端所感兴趣的接口,并且保留一个具体状态类的实体。
public class Context{
private State state;
public void sampleOperation(){
state.sampleOperation();
}
public vlid setState(State state){
this.state = state;
}
}
public interface State{
void sampleOperation();
}
public class ConcreteState implements State{
public void sampleOperation(){}
}
在什么情况下使用状态模式
1. 一个对象的行为依赖于它所处的状态,对象的行为必须随着其状态的改变而改变。
2. 对象的某个方法里依赖于一重或多重的条件转移语句,其中有大量的代码。状态模式把条件转移语句的每一个分支都包装到一个单独的类里。这使得这些条件转移分支能够以类的方式独立存在和演化。维护这些独立的类也就不再影响系统的其他部分。
[设计模式]State模式的更多相关文章
- 设计模式之State模式
State模式定义: 允许一个对象在状态改变是,改变它的行为.看起来对象似乎修改了它的类. 模式理解(个人): State模式主要解决的事在开发中时常遇到的根据不同状态需要进行不同的处理操作的问题,而 ...
- [java之设计模式]策略模式
策略模式(strategy pattern) 定义>> 将一系列的算法封装到一些列的类里面,并且可以相互替换 作用>> 将算法的变化独立于客户端,将算法的指责和算法的行为分开, ...
- [设计模式]访问者 Visitor 模式
访问者模式是对象的行为模式. 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变.
- C++设计模式之State模式
这里有两个例子: 1.https://www.cnblogs.com/wanggary/archive/2011/04/21/2024117.html 2.https://www.cnblogs.co ...
- [设计模式]迭代子模式 Iterator
迭代子模式又叫做游标cursor模式,是对象的行为模式.迭代子模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象. 迭代子模式被广泛的应用在Java语言的API中的几个设计模式之一.在Java ...
- 设计模式:state模式
核心: 把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化 例子: class State //状态接口 { public: virtual void show() = 0; ...
- 设计模式之 -- 状态模式(State)
状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.当控制一个对象的状态转换条件分支语句(if...else或switch...case)过于复杂时,可以此模式将状态的判断逻辑 ...
- 【转】设计模式 ( 十七) 状态模式State(对象行为型)
设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...
- [设计模式] 20 状态模式 State Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对状态模式是这样说的:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.状态模式的重点在于状态转换,很多时候,对 ...
随机推荐
- Zookeeper中的选举机制
Zookeeper虽然在配置文件中并没有指定master和slave,但是,zookeeper工作时,是有一个节点为leader,其他则为follower.leader是通过内部的选举机制临时产生的. ...
- Flask 安装 快速入门
$ pip install flask Flask自带的Server在端口5000上监听: ython app.py flask通过request.form['name']来获取表单的内容. 外部可见 ...
- easyui 扩展 之 Tree的simpleData加载
实例化.这里增加了三个属性,可以指定idFiled,textFiled和parentField.所以这里的simpleData可以不严格转换成tree的数据格式. $(function(){ $('# ...
- Jetty修改默认端口
1.webserver: Jetty2.version: 7.6.5, 8.1.53.operation: 修改默认端口3.1 修改Jetty目录下的/etc/jetty.xml 文件中的[por ...
- library和libraryTarget使用场景组件开发
https://segmentfault.com/q/1010000004676608 https://github.com/zhengweikeng/blog/issues/10
- 5、手把手教React Native实战之盒子模型BoxApp
用HTML5和React Native分别实现盒子模型显示 写法不一样: 1.样式 ,假设图片是本地的或者网络的又或者是其它地方的. 图片载入的 ...
- [LintCode] 二叉树的后序遍历
The recursive solution is trivial and I omit it here. Iterative Solution using Stack (O(n) time and ...
- Linux ssh其他服务器
- pip install selenium==版本号 报错
安装selenium是注意不要带版本号直接用如下命令: pip install selenium