State Pattern
来源:互联网 发布:淘宝淘宝军军用口粮 编辑:程序博客网 时间:2024/06/05 05:23
定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
using System;using System.Threading;using System.Windows.Forms;using System;using System.Drawing;using System.Collections.Generic;using System.Windows.Forms;namespace ThreadPoolTest{ abstract class State { protected Hero hero; public State(Hero hero) { this.hero=hero; } public abstract void BloodPlus(int dot); public abstract void BloodMinus(int dot); protected abstract void StatusChange(int blood_num); } class DeathState : State//已经死了的情况 0 { public DeathState(Hero hero) : base(hero) { Console.WriteLine("死了"); if (hero.blood < 0) hero.blood = 0; } public override void BloodPlus(int dot) { Console.WriteLine("英雄已死,没法加血"); } public override void BloodMinus(int dot) { Console.WriteLine("英雄已死,没法减血"); } protected override void StatusChange(int blood_num) { Console.WriteLine("永远不会走到这里的"); } } class RedState : State//血不多的情况 1 2 3 { public RedState(Hero hero) : base(hero) { Console.WriteLine("红了"); } public override void BloodMinus(int dot) { hero.blood -= dot; StatusChange(hero.blood); } public override void BloodPlus(int dot) { hero.blood += dot; StatusChange(hero.blood); } protected override void StatusChange(int blood_num) { if (blood_num <= 0) hero.state = new DeathState(hero); else if (blood_num >= 4) hero.state = new BlueState(hero); } } class BlueState : State//血较多的情况 4 { public BlueState(Hero hero) : base(hero) { Console.WriteLine("绿了"); if (hero.blood > 4) hero.blood = 4; } public override void BloodMinus(int dot) { hero.blood -= dot; StatusChange(hero.blood); } public override void BloodPlus(int dot) { Console.WriteLine("满血,不需要加血"); } protected override void StatusChange(int blood_num) { if (blood_num <= 0) hero.state = new DeathState(hero); else if (blood_num <= 3) hero.state = new RedState(hero); } } class Hero { public int blood;//英雄血的点数,最高为4,为0表示已经死亡 public State state; public Hero() { blood = 4; state = new BlueState(this); Console.WriteLine("一个新英雄,满血4"); } public void BloodDrop(int dot)//掉血 { state.BloodMinus(dot); } public void BloodInc(int dot)//补血 { state.BloodPlus(dot); } } class MainApp { static void Main() { Hero pig = new Hero(); Console.WriteLine(pig.blood); pig.BloodInc(1); Console.WriteLine(pig.blood); pig.BloodInc(3); Console.WriteLine(pig.blood); pig.BloodDrop(3); Console.WriteLine(pig.blood); pig.BloodInc(2); Console.WriteLine(pig.blood); pig.BloodInc(5); Console.WriteLine(pig.blood); pig.BloodDrop(2); Console.WriteLine(pig.blood); pig.BloodDrop(2); Console.WriteLine(pig.blood); pig.BloodDrop(2); Console.WriteLine(pig.blood); pig.BloodDrop(2); Console.WriteLine(pig.blood); pig.BloodDrop(2); Console.WriteLine(pig.blood); } }}
- State Pattern
- State Pattern
- The tenth pattern---------------State Pattern
- Design Pattern(3)-State Pattern
- Design Pattern 18-state
- State Design Pattern: Reminder
- 状态模式(State Pattern)
- 状态模式(State Pattern)
- State pattern (Delphi)
- 状态模式(State Pattern)
- State Design Pattern
- 状态模式(State Pattern)
- 状态模式【STATE PATTERN 】
- 状态模式【State Pattern】
- 状态模式(State Pattern)
- head first--------------state pattern
- 状态模式(State Pattern)
- 状态模式(State Pattern)
- NS2中的Scheduler,Handler和Event之间的关系
- Important aspects in AspectJ
- scp远程拷贝命令的使用
- 复旦女博士于娟:为啥是我得癌症?
- Android获取未安装或已安装apk的版本、图标等资源
- State Pattern
- POJ 1986 Distance Queries [LCA]
- InputFilter实现EditText文本输入过滤器
- ORACLE数据库备份手札
- c++ for循环中,如何改变字符串变量里的部分值 使之于i 和j 相同步变化?????(即循环用cvLoadImage的path自动改变)
- 在Ubuntu12.04 64bit中编译安装Codeblocks-svn
- c# byte[] string 转换
- 文案的力量
- 解决错误ERROR: No suitable Java found. In order to properly use the Android Developer Tools,…