using System;
using System.Collections.Generic;
using System.Text;
/*****************State设计模式**********************/
namespace SheJiMoShiDemo
{
//定义一个接口,hint:接口必须是公共的(public)型的,
//接口中只能包含方法、属性、索引器和事件的声明。不允许声明成员上的修饰符,
//即使是pubilc都不行,因为接口成员总是公有的,也不能声明为虚拟和静态的。
//如果需要修饰符,最好让实现类来声明
public interface State {
void fire();
}
internal class NormalFire:State {
public void fire() {
Console.Write("Normal Fire now 111111111\n");
}
}
internal class SupperFire:State {
public void fire() {
Console.Write("Supper Fire now 2222222222");
}
}
internal class Man {
public State _state = new NormalFire();
public void SetState(State state) {
this._state = state;
}
public void fire() {
_state.fire();
}
}
class Program
{
static void Main(string[] args)
{
Man m = new Man();
//调用正常开火
// m.SetState(new NormalFire());
m.fire();
//调用超级开火
m.SetState(new SupperFire());
m.fire();
//拖屏
Console.Read();
//总结:两种状态下的同一个fire()方法有不同的行为
//使用状态模式的好处是每个状态被封装到一个独立的类中,
//这些类可以独立变化,而主对象中没有繁琐的swich-case语句,并且添加新的状态非常容易,只需要从State派生一个新类即可
}
}
using System.Collections.Generic;
using System.Text;
/*****************State设计模式**********************/
namespace SheJiMoShiDemo
{
//定义一个接口,hint:接口必须是公共的(public)型的,
//接口中只能包含方法、属性、索引器和事件的声明。不允许声明成员上的修饰符,
//即使是pubilc都不行,因为接口成员总是公有的,也不能声明为虚拟和静态的。
//如果需要修饰符,最好让实现类来声明
public interface State {
void fire();
}
internal class NormalFire:State {
public void fire() {
Console.Write("Normal Fire now 111111111\n");
}
}
internal class SupperFire:State {
public void fire() {
Console.Write("Supper Fire now 2222222222");
}
}
internal class Man {
public State _state = new NormalFire();
public void SetState(State state) {
this._state = state;
}
public void fire() {
_state.fire();
}
}
class Program
{
static void Main(string[] args)
{
Man m = new Man();
//调用正常开火
// m.SetState(new NormalFire());
m.fire();
//调用超级开火
m.SetState(new SupperFire());
m.fire();
//拖屏
Console.Read();
//总结:两种状态下的同一个fire()方法有不同的行为
//使用状态模式的好处是每个状态被封装到一个独立的类中,
//这些类可以独立变化,而主对象中没有繁琐的swich-case语句,并且添加新的状态非常容易,只需要从State派生一个新类即可
}
}
}
效果图: