如何減少代碼中的分支語句

來源:互聯網
上載者:User

      如何減少代碼中的分支語句

  代碼中往往存在很多的分支語句:判斷+執行;大量的分支語句讓代碼看上去很醜陋,而且容易增加代碼複雜度。

所以我覺得減少代碼的分支語句或者隱藏分支語句是一件很有必要的事情,能夠讓代碼變得更加清晰易讀。

減少分支語句,在實際的編程中遇到了一種比較好的方式——Command模式減少分支語句。

Command模式:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化。

  所以可以將一系列請求都封裝成對象,形成一個請求集合。

當需要執行一個請求的時候直接去這個集合中尋找到對應的請求對象,然後執行對象的Command。

    

下面以一個具體的例子看一下這個過程:

結構如下:

    

1 命令原型

interface ScenceCommand {    void doExecute();}//CallHang命令class CallHangScenceCommand implements ScenceCommand {    private TelEventTreater mTreater;    public CallHangScenceCommand(TelEventTreater treater) {        mTreater = treater;    }    @Override    public void doExecute() {        mTreater.doHangCall();    }}//CallAnswer命令class CallAnswerScenceCommand implements ScenceCommand {    private TelEventTreater mTreater;    public CallAnswerScenceCommand(TelEventTreater treater) {        mTreater = treater;    }    @Override    public void doExecute() {        mTreater.doAnswerCall();    }}……不一一列出

 

2 命令註冊

 

abstract class ScenceCommandRegister {  //儲存所有的命令請求集合    private HashMap<String, ScenceCommand> mScenceCmdSet;    public ScenceCommandRegister() {        mScenceCmdSet = new HashMap<String, ScenceCommand>();    }    //命令請求註冊    public void registerCommand(String name, ScenceCommand command) {        mScenceCmdSet.put(name, command);    }    //命令請求查詢    public ScenceCommand getCommand(String name) {                return mScenceCmdSet.get(name);    }}class CallScenceCommandRegiser extends ScenceCommandRegister {    public CallScenceCommandRegiser(TelEventTreater treater) {        super();
     //註冊所有命令     registerCommand(CallInputCommandMatch.CALL_DEFAULT, new CallDefaultScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_HANG, new CallHangScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_ANSWER, new CallAnswerScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_REPLY, new CallReplyScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_MUTE, new CallMuteScenceCommand(treater));    registerCommand(CallInputCommandMatch.CALL_COMPLETE, new CallCompleteScenceCommand(treater)); registerCommand(CallInputCommandMatch.CALL_NORSP, new CallNoRspScenceCommand(treater)); }}

 

3 命令執行

private static ScenceCommandRegister mScenceRegister;@Overridepublic void onResult(Result res) {  String resultStr = res.Get_RawText();  do {     //操作請求     String cmdStr = mCommandMatch.matchInputCommand(resultStr);     if (cmdStr == null) {       break;     }    //命令請求    ScenceCommand scenceCmd = mScenceRegister.getCommand(cmdStr);    if (scenceCmd == null) {      break;    }    //命令執行    scenceCmd.doExecute();  } while (false);}

 

4 總結

  這是存在比較多的條件判斷情況下,以此方式進行存在一個問題是:增加類的數量以及其他額外的開銷。

但其實判斷仍然是存在的,只是我們將其隱藏起來而已,很多時候覆雜的邏輯流程必然存在無法避免,

但是卻可以將複雜的事情簡單化。軟體中的複雜度是必然存在的,如何化複雜為簡單,真是學問很大啊!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.