亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我想通過策略模式給單據返回不同的審批者 ,這個問題應該如何解決呢?或許應該更改我的設計?

我想通過策略模式給單據返回不同的審批者 ,這個問題應該如何解決呢?或許應該更改我的設計?

一只萌萌小番薯 2023-04-20 19:15:16
關于審批單業務中的策略模式運用的問題。 我的業務場景中需要處理一種審批單據, 這種單據根據提出人不同(日入經理和普通職員), 審批者是不一樣的。 //偽代碼如下: class ApprovalForm {     public ApprovalStrategy approvalStrategy;        //提交申請單     public Send()     {         List<Approver>    approverList = approvalStrategy.GetApprover();         Send to next   Approver  ;          } } Interface  ApprovalStrategy {      List<Approver> .GetApprover(); } class ManagerStrategy  : ApprovalStrategy {     public List<Approver> .GetApprover()     {         return Manager's Approver;     } } class EmployeeStrategy : ApprovalStrategy {     public List<Approver> .GetApprover()     {         return  Employee's Approver;     } } Main() {     ApprovalForm form = new ApprovalForm();     if ( current user is Manager )         form.approvalStrategy; =  new ManagerStrategy ();     if ( current user is Manager )         form.approvalStrategy; =  new EmployeeStrategy (); } 問題是,策略模式雖然幫我在ApprovalForm里面去掉了硬編碼的判斷, 但是最終我還是要在Mian里面進行硬編碼的判斷。 
查看完整描述

2 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

設計模式只是幫你減少選擇的過程和容易擴展,但是不能完全消除if else,因為必然有一個地方需要這樣去判斷,頂多有的模式是隱藏了判斷的實現,你感覺看不到而已。而你這個需求,current user 這個人的角色,肯定是從前臺,或者是從當前session獲取到的一個標識,你要怎樣把這個標識和你的底層類結合起來,還是得靠判斷,所以還是別想消除這個if else了,倒是我覺得你可以把這個判斷放到更加底層的類里面,比如你建立一個工廠,這個工廠通過你的參數來生產對應的實現類。

查看完整回答
反對 回復 2023-04-23
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

//偽代碼如下:   

class ApprovalForm   

{   

    public ApprovalStrategy approvalStrategy;   

     

    //提交申請單   

    public Send()   

    {   

        List<Approver>    approverList = approvalStrategy.GetApprover();   

        Send to next   Approver  ;        

    }   

}   

  

  

Interface  ApprovalStrategy   

{   

     List<Approver> .GetApprover();   

}   

  

class ManagerStrategy  : ApprovalStrategy   

{   

    public List<Approver> .GetApprover()   

    {   

        return Manager's Approver;   

    }   

}   

  

class EmployeeStrategy : ApprovalStrategy   

{   

    public List<Approver> .GetApprover()   

    {   

        return  Employee's Approver;   

    }   

}   

直接在這層加判斷就行  


查看完整回答
反對 回復 2023-04-23
  • 2 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號