- 浏览: 25652 次
- 性别:
- 来自: 上海
文章分类
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。
状态决定行为。
public interface VoteState {
public void vote(String user,String voteItem,VoteManager voteManager);
}
public class NormalVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
voteManager.getMapVote().put(user, voteItem);
}
}
public class RepeatVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
}
}
public class SpiteVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
String s = voteManager.getMapVote().get(user);
if(s != null) {
voteManager.getMapVote().remove(user);
}
}
}
public class BlackVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
}
}
public class VoteManager {
private VoteState state = null;
private Map<String, String> mapVote = new HashMap<String, String>();
private Map<String, Integer> mapVoteCount = new HashMap<String, Integer>();
public Map<String, String> getMapVote() {
return mapVote;
}
public void vote(String user, String voteItem) {
Integer oldVoteCount = mapVoteCount.get(user);
if(oldVoteCount == null) {
oldVoteCount = 0;
}
oldVoteCount += 1;
mapVoteCount.put(user, oldVoteCount);
if(oldVoteCount == 1) {
state = new NormalVoteState();
} else if(oldVoteCount > 1 && oldVoteCount < 5) {
state = new RepeatVoteState();
} else if(oldVoteCount >= 5 && oldVoteCount < {
state = new SpiteVoteState();
} else if(oldVoteCount >= {
state = new BlackVoteState();
}
state.vote(user, voteItem,this);
}
}
客户端代码:
VoteManager vm = new VoteManager();
for(int i = 0;i < 8;i++) {
vm.vote("ul","A");
}
状态模式的功能就是分离状态的行为,通过维护状态的变化,来调用不同状态对应的不同功能。
状态决定行为。
public interface VoteState {
public void vote(String user,String voteItem,VoteManager voteManager);
}
public class NormalVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
voteManager.getMapVote().put(user, voteItem);
}
}
public class RepeatVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
}
}
public class SpiteVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
String s = voteManager.getMapVote().get(user);
if(s != null) {
voteManager.getMapVote().remove(user);
}
}
}
public class BlackVoteState implements VoteState {
public void vote(String user,String voteItem,VoteManager voteManager){
}
}
public class VoteManager {
private VoteState state = null;
private Map<String, String> mapVote = new HashMap<String, String>();
private Map<String, Integer> mapVoteCount = new HashMap<String, Integer>();
public Map<String, String> getMapVote() {
return mapVote;
}
public void vote(String user, String voteItem) {
Integer oldVoteCount = mapVoteCount.get(user);
if(oldVoteCount == null) {
oldVoteCount = 0;
}
oldVoteCount += 1;
mapVoteCount.put(user, oldVoteCount);
if(oldVoteCount == 1) {
state = new NormalVoteState();
} else if(oldVoteCount > 1 && oldVoteCount < 5) {
state = new RepeatVoteState();
} else if(oldVoteCount >= 5 && oldVoteCount < {
state = new SpiteVoteState();
} else if(oldVoteCount >= {
state = new BlackVoteState();
}
state.vote(user, voteItem,this);
}
}
客户端代码:
VoteManager vm = new VoteManager();
for(int i = 0;i < 8;i++) {
vm.vote("ul","A");
}
发表评论
-
访问者模式Visitor预留通路,回调实现
2014-03-13 16:55 379表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
桥接模式Bridge分离抽象和实现
2014-03-13 16:55 491将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接 ... -
职责链模式Chain of Responsibility分离职责,动态组合
2014-03-12 17:25 341使多个对象都有机会处 ... -
装饰模式Decorator动态组合
2014-03-12 17:00 277动态地给一个对象添加 ... -
解释器模式Interpreters分离实现,解释执行
2014-03-12 16:27 296给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解 ... -
享元模式Flyweight分离与共享
2014-03-12 13:20 301运用共享技术有效地支持大量细粒度的对象。 安全实体:就是被系 ... -
备忘录模式Memento保存和回复内部状态
2014-03-11 17:47 434在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 ... -
策略模式Strategy分离算法,选择实现
2014-03-11 15:26 418迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信 ... -
模板方法模式Templete Method 固定算法骨架
2014-03-11 11:15 538定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法 ... -
组合模式Composite统一叶子对象和组合对象
2014-03-07 18:18 308将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使 ... -
迭代器模式Iterator 控制访问聚合对象中的元素
2014-03-07 17:57 410提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该 ... -
命令模式Command 封装请求
2014-03-07 16:26 381将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 ... -
观察者模式Observer订阅模式-触发联动
2014-03-07 11:19 384定义对象间的一种一对 ... -
代理模式Proxy 为别人做嫁衣(控制对象访问)
2014-03-06 00:39 332为其他对象提供一种代理以控罪对这个对象的访问。 代理大致被分为 ... -
中介者模式Mediator 封装交互
2014-03-06 00:19 370用一个中介对象来封装 ... -
原型模式Prototype 克隆生成对象
2014-03-06 00:19 567用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ... -
生成器模式Builder 分离整体构建算法和部件构造
2014-03-06 00:19 307将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... -
抽象工厂模式 Abstract Factory 选择产品簇的实现
2014-03-06 00:20 417工厂方法模式或简单工 ... -
工厂方法模式Factory Method延迟到子类来选择实现
2014-03-05 18:12 951定义一个用于创建对象 ... -
单例模式Singleton某个类只需要一个类实例
2014-03-05 16:46 426保证一个类只有一个实例,并提供一个访问它的全局访问点。 懒汉 ...
相关推荐
标题和描述均提到了"C#面向对象设计模式"中的State状态模式,这表明文章的核心内容是围绕State模式在C#编程语言中的应用展开。State模式是一种行为设计模式,旨在允许对象在其内部状态改变时,其行为也能相应地改变...
状态模式的核心思想是将每一种状态封装成一个类,使得对象可以在运行时根据其内部状态的变化来改变其行为。 一、状态模式的概念 状态模式是一种行为设计模式,它的主要特点是对象的行为取决于其当前的状态。在状态...
我们可以使用状态模式来处理订单的状态转换,例如从新建到已支付的过程,这样可以清晰地分离出每种状态下的业务逻辑,减少复杂的条件判断。 #### 九、状态模式的优缺点 - **优点**: - 降低对象之间的耦合度。 - ...
状态模式是一种行为设计模式,...通过将行为与状态分离,我们可以更好地封装和管理对象的行为变化,同时保持了代码的可扩展性。在实际项目中,尤其是在处理有多种状态变化的对象时,状态模式是一个非常实用的设计模式。
简单来说,状态模式通过将对象的行为与状态分离,从而实现了行为的动态改变。这种模式的主要优点在于能够简化对象的状态管理,并使代码更易于理解和维护。 #### 三、状态模式的基本结构 状态模式主要包含以下几个...
在状态模式中,通过分离状态和行为,可以更容易地管理和扩展系统。例如,当需要添加新的状态时,只需要新增具体状态类即可,无需修改现有代码。同时,状态之间的转换也变得更加清晰和可控,因为每个状态类都清楚地...
该模式的主要思想是将对象的状态和行为分离,使用不同的状态子类来实现不同的行为。 何时使用 State 模式?State 模式在实际使用中非常多,特别是在状态切换的场景中。如果我们经常使用 If-Else 语句来判断状态并...
3. 如果有许多相关的类,它们之间的区别仅在于行为随状态的变化而变化,可以使用State模式将这些类中的行为分离出来。 在实现State模式时,有几点需要注意: 1. 不要过度使用:虽然State模式可以很好地解耦状态...
State 模式将状态和行为分离,实现了状态切换的灵活性和可扩展性。 定义:State 模式的定义是:不同的状态,不同的行为;或者说,每个状态有着相应的行为。何时使用?State 模式在实际使用中比较多,适合"状态的...
通过将状态与行为分离,状态模式使得代码更易于理解和维护。然而,需要注意的是,不恰当的应用可能会导致代码变得复杂和难以维护。因此,在选择是否使用状态模式时,需要权衡其带来的好处与可能引入的复杂性。
状态模式(State Pattern)是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。这个对象看起来好像修改了它的类。状态模式主要解决的是当一个对象的行为依赖于它的状态时,如何将这些状态从对象中...
在软件工程中,当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变其行为时,State模式是非常有用的。 在State模式中,我们定义了一个表示各种状态的对象类和一个行为接口。每个状态类都实现了这个...
总结起来,Python中的状态模式提供了一种结构化的方式来处理对象状态的变化,通过分离状态行为和对象本身,使得代码更加模块化和易于扩展。不同的实现方式体现了Python语言的灵活性,可以根据项目需求选择最适合的...
State模式的核心思想是将状态转换的逻辑从Context对象中解耦出来,使得Context对象不再需要关心如何根据内部状态来改变行为,而是将这些细节交给State对象处理。这样做的好处包括: - **降低复杂性**: 将状态相关的...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变它的行为,使对象看起来好像改变了它的类。在服务器监控的上下文中,我们可以将这一模式应用到各种组件的状态检测和管理中。 首先,让我们理解什么是...
状态模式将状态封装成独立的类,并将请求委托给当前状态对象,从而实现状态的切换和状态行为的变化。 状态模式的优点: * 可以将状态和行为分离,使得对象的行为可以随着状态的改变而改变,从而实现更加灵活的设计...
1. **分离状态相关的代码**:状态模式将每种状态的行为封装在独立的类中,这有助于保持代码结构清晰,降低复杂度。 2. **易于扩展**:添加新的状态或转换只需添加新的具体状态类和适当的状态转换代码,不需修改已有...
1. 状态模式可以使得系统中的对象能够根据不同的状态表现出不同的行为,提高了系统的灵活性和可维护性。 2. 状态模式可以使得客户端代码与状态对象的实现细节分离,提高了系统的可扩展性和可维护性。 3. 状态模式...
状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为,对象看起来似乎修改了它的类。这种模式常用于处理对象的状态变化,使得对象的行为与其状态紧密相关,而状态之间的转换则通过上下文对象来实现。...