关于状态模式

fedoriri 2013-06-25 01:26:28
自己编了个例子,但感觉似是而非,不是那么自然,有哪里不对或者可以优化的地方?请模式达人给看下。
public interface State{
void wear();
State changState();
}
public class SpringState : State {
public void wear() {
Console.WriteLine("Everyone wear outercoat.");
}
public State changState() {
return new SummerState();
}
}

public class SummerState : State {
public void wear() {
Console.WriteLine("Everyone wear shirts");
}
public State changState() {
return new AutumnState();
}
}
public class AutumnState : State {
public void wear() {
Console.WriteLine("Everyone wear sweater.");
}
public State changState() {
return new WinterState();
}
}
public class WinterState : State {
public void wear() {
Console.WriteLine("Everyone wear jacket.");
}
public State changState() {
return new SpringState();
}
}

public class Person {
private State current;
public Person() {
current = new SpringState();
}

public void wear() {
current.wear();
}
public void senseSeason() {
current =current.changState();
}

}
class client {
static void Main(string[] args) {
Person p = new Person();
p.wear();

p.senseSeason();
p.wear();

p.senseSeason();
p.wear();

p.senseSeason();
p.wear();
}
}
...全文
40 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘色的喵 2013-06-25
  • 打赏
  • 举报
回复
百度“无尽加班何时休——状态模式”
橘色的喵 2013-06-25
  • 打赏
  • 举报
回复
是不太对! 是我写的话,我会写月份 比如月份是2的话就触发春天那个state。 public void wear(State state) { if(state.month<3) { Console.WriteLine("Everyone wear outercoat."); } else { changState(); state.wear(); } }

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧