日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学用状态机模式,写的报销流程,请指教

發布時間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学用状态机模式,写的报销流程,请指教 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
剛學編程不久,請前輩們指點。
需求變化點:不同的金額,和不同的角色走不同的報銷流程

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}元,項目經理簽字報銷",?employee.Money);
????????????FinishState(employee,?sign);
????????}
????????
else
????????{
????????????
string?sign?=?string.Format("{0}元,項目經理簽字后,給部門經理",?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}元,部門經理簽字報銷",?employee.Money);
????????????FinishState(employee,?sign);
????????}
????????
else
????????{
????????????
string?sign?=?string.Format("{0}元,部門經理簽字后,給總經理",?employee.Money);
????????????ChangeState(employee,?sign,?
new?GeneralManagerState());
????????}
????}
}

class?GeneralManagerState?:?State
{
????
public?override?void?ChangeState(Employee?employee)
????{
????????
string?sign?=?string.Format("{0}元,總經理簽字報銷",?employee.Money);
????????FinishState(employee,?sign);
????}
}

class?FinishedState?:?State
{
????
public?override?void?ChangeState(Employee?employee)
????{
????????Console.WriteLine(
"簽字完成,找財務報銷{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();
????}
}

轉載于:https://www.cnblogs.com/kyorry/archive/2008/05/25/1206893.html

總結

以上是生活随笔為你收集整理的学用状态机模式,写的报销流程,请指教的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。