学用状态机模式,写的报销流程,请指教
生活随笔
收集整理的這篇文章主要介紹了
学用状态机模式,写的报销流程,请指教
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
剛學(xué)編程不久,請(qǐng)前輩們指點(diǎn)。
需求變化點(diǎn):不同的金額,和不同的角色走不同的報(bào)銷流程
using?System;
static?class?Factory
{
????public?static?Employee?CreateEmployee(string?name)
????{
????????Employee?employee?=?null;
????????switch?(name)
????????{
????????????case?"Sales":
????????????????employee?=?new?Sales();
????????????????break;
????????????case?"ProjectManager":
????????????????employee?=?new?ProjectManager();
????????????????break;
????????}
????????if?(employee?==?null)?throw?new?Exception("傳入的名字非法!");
????????return?employee;
????}
}
abstract?class?Employee
{
????public?int?Money?{?get;?set;?}
????public?State?State?{?get;?set;?}
????public?void?Sign()
????{
????????State.ChangeState(this);
????}
}
class?Sales?:?Employee
{
????public?Sales()
????{
????????State?=?new?ProjectManagerState();
????}
}
class?ProjectManager?:?Employee
{
????public?ProjectManager()
????{
????????State?=?new?DepartmentManagerState();
????}
}
abstract?class?State
{
????public?abstract?void?ChangeState(Employee?employee);
????public?virtual?void?ChangeState(Employee?employee,?string?sign,?State?state)
????{
????????Console.WriteLine(sign);
????????employee.State?=?state;
????????employee.Sign();
????}
????public?virtual?void?FinishState(Employee?employee,?string?sign)
????{
????????Console.WriteLine(sign);
????????employee.State?=?new?FinishedState();
????????employee.Sign();
????}
}
class?ProjectManagerState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????if?(employee.Money?<?200)
????????{
????????????string?sign?=?string.Format("{0}元,項(xiàng)目經(jīng)理簽字報(bào)銷",?employee.Money);
????????????FinishState(employee,?sign);
????????}
????????else
????????{
????????????string?sign?=?string.Format("{0}元,項(xiàng)目經(jīng)理簽字后,給部門經(jīng)理",?employee.Money);
????????????ChangeState(employee,?sign,?new?DepartmentManagerState());
????????}
????}
}
class?DepartmentManagerState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????if?(employee.Money?<?1000)
????????{
????????????string?sign?=?string.Format("{0}元,部門經(jīng)理簽字報(bào)銷",?employee.Money);
????????????FinishState(employee,?sign);
????????}
????????else
????????{
????????????string?sign?=?string.Format("{0}元,部門經(jīng)理簽字后,給總經(jīng)理",?employee.Money);
????????????ChangeState(employee,?sign,?new?GeneralManagerState());
????????}
????}
}
class?GeneralManagerState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????string?sign?=?string.Format("{0}元,總經(jīng)理簽字報(bào)銷",?employee.Money);
????????FinishState(employee,?sign);
????}
}
class?FinishedState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????Console.WriteLine("簽字完成,找財(cái)務(wù)報(bào)銷{0}元",?employee.Money);
????}
}
class?Test
{
????static?void?Main()
????{
????????Employee?employee?=?Factory.CreateEmployee("Sales");
????????employee.Money?=?1150;
????????employee.Sign();
????????employee?=?Factory.CreateEmployee("ProjectManager");
????????employee.Money?=?2150;
????????employee.Sign();
????}
}
需求變化點(diǎn):不同的金額,和不同的角色走不同的報(bào)銷流程
using?System;
static?class?Factory
{
????public?static?Employee?CreateEmployee(string?name)
????{
????????Employee?employee?=?null;
????????switch?(name)
????????{
????????????case?"Sales":
????????????????employee?=?new?Sales();
????????????????break;
????????????case?"ProjectManager":
????????????????employee?=?new?ProjectManager();
????????????????break;
????????}
????????if?(employee?==?null)?throw?new?Exception("傳入的名字非法!");
????????return?employee;
????}
}
abstract?class?Employee
{
????public?int?Money?{?get;?set;?}
????public?State?State?{?get;?set;?}
????public?void?Sign()
????{
????????State.ChangeState(this);
????}
}
class?Sales?:?Employee
{
????public?Sales()
????{
????????State?=?new?ProjectManagerState();
????}
}
class?ProjectManager?:?Employee
{
????public?ProjectManager()
????{
????????State?=?new?DepartmentManagerState();
????}
}
abstract?class?State
{
????public?abstract?void?ChangeState(Employee?employee);
????public?virtual?void?ChangeState(Employee?employee,?string?sign,?State?state)
????{
????????Console.WriteLine(sign);
????????employee.State?=?state;
????????employee.Sign();
????}
????public?virtual?void?FinishState(Employee?employee,?string?sign)
????{
????????Console.WriteLine(sign);
????????employee.State?=?new?FinishedState();
????????employee.Sign();
????}
}
class?ProjectManagerState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????if?(employee.Money?<?200)
????????{
????????????string?sign?=?string.Format("{0}元,項(xiàng)目經(jīng)理簽字報(bào)銷",?employee.Money);
????????????FinishState(employee,?sign);
????????}
????????else
????????{
????????????string?sign?=?string.Format("{0}元,項(xiàng)目經(jīng)理簽字后,給部門經(jīng)理",?employee.Money);
????????????ChangeState(employee,?sign,?new?DepartmentManagerState());
????????}
????}
}
class?DepartmentManagerState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????if?(employee.Money?<?1000)
????????{
????????????string?sign?=?string.Format("{0}元,部門經(jīng)理簽字報(bào)銷",?employee.Money);
????????????FinishState(employee,?sign);
????????}
????????else
????????{
????????????string?sign?=?string.Format("{0}元,部門經(jīng)理簽字后,給總經(jīng)理",?employee.Money);
????????????ChangeState(employee,?sign,?new?GeneralManagerState());
????????}
????}
}
class?GeneralManagerState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????string?sign?=?string.Format("{0}元,總經(jīng)理簽字報(bào)銷",?employee.Money);
????????FinishState(employee,?sign);
????}
}
class?FinishedState?:?State
{
????public?override?void?ChangeState(Employee?employee)
????{
????????Console.WriteLine("簽字完成,找財(cái)務(wù)報(bào)銷{0}元",?employee.Money);
????}
}
class?Test
{
????static?void?Main()
????{
????????Employee?employee?=?Factory.CreateEmployee("Sales");
????????employee.Money?=?1150;
????????employee.Sign();
????????employee?=?Factory.CreateEmployee("ProjectManager");
????????employee.Money?=?2150;
????????employee.Sign();
????}
}
轉(zhuǎn)載于:https://www.cnblogs.com/kyorry/archive/2008/05/25/1206893.html
總結(jié)
以上是生活随笔為你收集整理的学用状态机模式,写的报销流程,请指教的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.net2.0工具包AjaxCon
- 下一篇: ASP.NET存储Session的Sta