- 浏览: 63049 次
- 性别:
- 来自: 北京
文章分类
最新评论
1、意图
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
2、别名
状态对象(Objects for States)
3、动机
考虑一个表示网络连接的类TCPConnection。一个TCPConnection对象的状态处于若干不同状态之一:连接已建立(Established)、正在监听(Listening)、连接已关闭(Closed)。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态作出不同的反应。例如,一个Open请求的结果依赖于该连接是处于连接已关闭状态还是连接已建立状态。State模式描述了TCPConnection如何在每一种状态下表现出不同的行为。
这一模式的关键思想是引入一个称为TCPState的抽象类来表示网络的连接状态。TCPState类为各表示不同的操作状态的子类声明了一个公共接口。TCPState的子类实现与特定状态相关的行为。例如,TCPEstablished和TCPClosed类分别实现了特定于TCPConnection的连接已建立状态和连接已关闭状态的行为。
TCPConnection类维护一个表示TCP连接当前状态的状态对象(一个TCPState子类的实例)。TCPConnection类将所有与状态相关的请求委托给这个状态对象。TCPConnection使用它的TCPState子类实例来执行特定于连接状态的操作。
一旦连接状态改变,TCPConnection对象就会改变它所使用的状态对象。例如当连接从已建立状态转为已关闭状态时,TCPConnection会用一个TCPClosed的实例来代替原来的TCPEstablished的实例。
4、适用性
在下面的两种情况下均可使用State模式:
一个对象的行为取决去它的状态,并且它必须在运行时刻根据状态改变它的行为。
一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放到一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
5、结构
6、参与者
Context(环境,如TCPConnection)
——定义客户感兴趣的接口。
——维护一个ConcreteState子类的实例,这个实例定义当前状态。
State(状态,如TCPState)
——定义一个接口以封装与Context的一个特定状态相关的行为。
ConcreteState subclasses(具体状体子类,如TCPEstablished,TCPListen,TCPClosed)
——每一个子类实现一个与Context的一个状态相关的行为
7、代码示例
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
2、别名
状态对象(Objects for States)
3、动机
考虑一个表示网络连接的类TCPConnection。一个TCPConnection对象的状态处于若干不同状态之一:连接已建立(Established)、正在监听(Listening)、连接已关闭(Closed)。当一个TCPConnection对象收到其他对象的请求时,它根据自身的当前状态作出不同的反应。例如,一个Open请求的结果依赖于该连接是处于连接已关闭状态还是连接已建立状态。State模式描述了TCPConnection如何在每一种状态下表现出不同的行为。
这一模式的关键思想是引入一个称为TCPState的抽象类来表示网络的连接状态。TCPState类为各表示不同的操作状态的子类声明了一个公共接口。TCPState的子类实现与特定状态相关的行为。例如,TCPEstablished和TCPClosed类分别实现了特定于TCPConnection的连接已建立状态和连接已关闭状态的行为。
TCPConnection类维护一个表示TCP连接当前状态的状态对象(一个TCPState子类的实例)。TCPConnection类将所有与状态相关的请求委托给这个状态对象。TCPConnection使用它的TCPState子类实例来执行特定于连接状态的操作。
一旦连接状态改变,TCPConnection对象就会改变它所使用的状态对象。例如当连接从已建立状态转为已关闭状态时,TCPConnection会用一个TCPClosed的实例来代替原来的TCPEstablished的实例。
4、适用性
在下面的两种情况下均可使用State模式:
一个对象的行为取决去它的状态,并且它必须在运行时刻根据状态改变它的行为。
一个操作中含有庞大的多分支的条件语句,并且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放到一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。
5、结构
6、参与者
Context(环境,如TCPConnection)
——定义客户感兴趣的接口。
——维护一个ConcreteState子类的实例,这个实例定义当前状态。
State(状态,如TCPState)
——定义一个接口以封装与Context的一个特定状态相关的行为。
ConcreteState subclasses(具体状体子类,如TCPEstablished,TCPListen,TCPClosed)
——每一个子类实现一个与Context的一个状态相关的行为
7、代码示例
interface Statelike { /** * Writer method for the state name. * @param STATE_CONTEXT * @param NAME */ void writeName(final StateContext STATE_CONTEXT, final String NAME); } class StateA implements Statelike { /* (non-Javadoc) * @see state.Statelike#writeName(state.StateContext, java.lang.String) */ @Override public void writeName(final StateContext STATE_CONTEXT, final String NAME) { System.out.println(NAME.toLowerCase()); STATE_CONTEXT.setState(new StateB()); } } class StateB implements Statelike { /** State counter */ private int count = 0; /* (non-Javadoc) * @see state.Statelike#writeName(state.StateContext, java.lang.String) */ @Override public void writeName(final StateContext STATE_CONTEXT, final String NAME) { System.out.println(NAME.toUpperCase()); // Change state after StateB's writeName() gets invoked twice if(++count > 1) { STATE_CONTEXT.setState(new StateA()); } } } The context class has a state variable that it instantiates in an initial state, in this case StateA. In its method, it uses the corresponding methods of the state object. public class StateContext { private Statelike myState; /** * Standard constructor */ public StateContext() { setState(new StateA()); } /** * Setter method for the state. * Normally only called by classes implementing the State interface. * @param NEW_STATE */ public void setState(final Statelike NEW_STATE) { myState = NEW_STATE; } /** * Writer method * @param NAME */ public void writeName(final String NAME) { myState.writeName(this, NAME); } }
public class TestClientState { public static void main(String[] args) { final StateContext SC = new StateContext(); SC.writeName("Monday"); SC.writeName("Tuesday"); SC.writeName("Wednesday"); SC.writeName("Thursday"); SC.writeName("Friday"); SC.writeName("Saturday"); SC.writeName("Sunday"); } }
monday TUESDAY WEDNESDAY thursday FRIDAY SATURDAY sunday
发表评论
-
STRATEGY(策略)——对象行为型模式
2013-06-17 16:19 6911、意图 定义一系列的算法,把它们一个个封装起来,并且 ... -
OBSERVER(观察者)——对象行为型模式
2013-06-13 15:36 7121、意图 定义对象 ... -
MEDIATOR(中介者)——对象行为型模式
2013-06-09 16:17 6831、意图 用一个中 ... -
CHAIN OF RESPONSIBILITY(职责链) —— 对象行为型模式
2013-06-06 16:32 6531、意图 使多个对象都有机会处理请求,从而避免请求的发 ... -
PROXY(代理) —— 对象结构型模式
2013-06-05 11:24 7591、意图 为其他对 ... -
DECORATOR(装饰) -—— 对象机构型模式
2013-06-03 11:43 7011、意图 动态地给一个对象添加一些额外的职责。就增加功 ... -
COMPOSITE(组合) ---- 对象结构型模式
2013-05-31 15:12 7751、意图 将对象组 ... -
FACTORY METHOD(工厂方法) ---- 对象创建型模式
2013-05-28 11:43 7251、意图 定义一个用于创建对象的接口,让子类决定实例化 ... -
设计模式的三大分类解析
2013-05-24 14:48 852设计模式在功能上 ... -
TEMPLATE METHOD(模板方法)----- 类行为型模式
2013-04-07 11:27 7051、意图 定义一个 ... -
ADAPTER(适配器) --- 类对象结构型模式
2013-03-28 11:33 6001、意图 将一个类的接口转化成客户希望的另外一个接口。 ... -
BRIGE(桥接) ------ 对象结构型模式
2013-03-27 11:20 7461、意图 将抽象部 ... -
COMMAND(命令) ---- 对象行为型模式
2013-03-06 11:20 7291、意图 将一个请求封装为一个对象,从而使你可用不同的 ... -
VISITOR(访问者) ---- 对象行为型模式
2013-02-26 17:03 9181、意图 表示 ... -
Builder(生成器)---- 对象创建型模式
2013-02-25 15:54 6361、意图 将一个复杂对象的创建和它的表示分离,使得同样的 ... -
ABSTRACT FACTORY(抽象工厂)------ 对象创建型模式
2013-02-22 11:21 6851、意图 提供一个创建一系列相关或相互依赖对象的接口,而 ... -
Flyweight pattern(享元模式)
2013-02-20 14:45 7771. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展 ... -
Facade模式 --- 对象结构型模式
2013-02-19 17:03 7061、意图 为子系统中 ... -
23个设计模式的名字和意图
2013-02-19 15:41 7241、Abstract Factory:提供 ... -
从MVC理解设计模式
2013-02-19 14:40 778本文将透过MVC来帮助我们理解“模式”这一术语的含义。 ...
相关推荐
5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 ...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。...同时,状态模式也使得对象的行为与其状态之间的依赖关系变得更加清晰,符合开闭原则——对扩展开放,对修改关闭。
本文将深入探讨其中的一种——观察者模式(Observer Pattern),它是行为设计模式的一种,主要用来封装行为的变化,实现对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被...
十一个行为型模式 状态模式-State Pattern 处理对象的多种状态及其相互转换——状态模式(一) 处理对象的多种状态及其相互转换——状态模式(二) 处理对象的多种状态及其相互转换——状态模式(三) 处理对象的...
设计模式——状态模式状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同...
**行为型模式**:包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)...
”这一定义强调了状态模式的核心思想——通过改变对象所处的具体状态类来改变其行为,而不是通过修改对象自身来实现行为的变化。 ### 模式结构 状态模式主要由以下几种角色构成: - **Context(环境类)**:持有...
- 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎改变了它的类。 - 策略模式(Strategy):定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法的变化独立...
#### 行为模式 1. **Template Method模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。这种模式适用于算法的步骤固定,但其中的...
**行为型模式**:包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、...
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 ### 一、观察者模式概念 观察者模式的核心思想是让主题(Subject)...
特别地,控制对象行为的关键状态(即控制状态)被抽取出来。需要注意的是,这些用于OOP中的自动机与用于正则表达式匹配的传统自动机有显著的不同。具体来说,在OOP中,对象是以接口和方法的形式设计的,而不是以可...
备忘录模式(Memento)是一种行为型设计模式,它允许在不暴露对象的实现细节的情况下,捕获并保存对象的内部状态,从而可以在未来某个时刻恢复到之前的状态。备忘录模式特别适用于实现撤销操作,或是需要进行状态...
1. **模式定义**:理解状态模式的基本概念,包括模式的组成元素——上下文(Context)、具体状态(Concrete State)和状态接口(State)。 2. **上下文角色**:上下文是拥有状态的对象,它定义了与状态相关的一系列...
其中包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式...
状态模式是一种行为设计模式,它使对象能够在运行时更改其行为,根据对象的状态改变其执行的动作。这种模式将特定的行为与状态相关联,使得当对象状态改变时,其行为也会相应地变化,而无需修改对象的结构。 在给定...
在这个游戏中,小鸡会有不同的行为模式,比如吃食、睡觉、玩耍等,这些都是根据小鸡的状态来决定的。 状态模式的核心思想是将状态的行为封装在各自独立的类中,这样可以使对象在其内部状态改变时改变其行为,看起来...
7. 状态模式(State):允许一个对象在其内部状态改变时改变它的行为。 8. 策略模式(Strategy):定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。 9. 模板方法模式(Template Method):在一个方法...
行为模式部分涉及: 1. Template模式,模板方法模式,在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 2. Strategy模式,策略模式,定义一系列算法,把它们一个个封装起来,并使它们可相互替换。 3. ...