今天我們來寫高逼格的if else

2021-10-01 16:37:31 字數 2371 閱讀 3190

一、實況概述

對於多種判斷,在**中遇到的情況太多了,今天我們拿管理員許可權舉個?。

一般來說我們正常的後台管理系統都有所謂的角色概念,不同管理員許可權是不一樣的,能夠行使的操作也不一樣:

乙個使用者登陸進來,我們根據使用者不同角色來判斷哪些行為;

強行**一波:

這種是最順手的, 只要手夠快,腦子都跟不上**;也是平時寫的最多的。

這樣當系統裡有幾十個角色時,那幾十個 if/else巢狀可以說是非常酸爽了…… 這樣一來非常不優雅,別人閱讀起來很費勁;二來則是以後如果再複雜一點,或者想要再加條件的話不好擴充套件;而且**一改,以前的老功能肯定還得重測,豈不瘋了……

今天我們來說說高逼格的方法。。開始我們的code show。。

二、最香的列舉

什麼角色能幹什麼事,這明顯就是乙個對應關係,所以為什麼不用列舉呢?

首先定義乙個公用的介面roleoperation,表示不同角色所能做的操作:

inte***ce roleoperation
接下來我們將不同角色的情況全部交由列舉類來做,定義乙個不同角色有不同許可權的列舉類roleenum:

enum

class roleenum : roleoperation },

role_order_admin },

role_normal

}}

這樣呼叫就變的異常簡單了,一行**就行了

/**

* 使用列舉方法

*/funjudgeuserenum

(rolename : string)

: string

這樣的好處就在於以後要擴充套件條件, 只需要在列舉類中增加**即可,而不用去修改以前的**。

三、高逼格的工廠模式

不同分支做不同的事情,很明顯提供了使用工廠模式的契機,我們只需要將不同情況單獨定義好,然後去工廠類中聚合就行。

如下圖,我們將不同的管理許可權單獨定義在role包裡,然後在rolefactory中對許可權進行整合

第一步、將不同許可權單獨定義

/**

* 普通使用者 有c許可權

*/class

normalrole

(rolename : string)

: roleoperation

}

/**

* 訂單管理員 有b許可權

*/class

orderadmin

(rolename : string)

: roleoperation

}

/**

* 系統管理員 有a許可權

*/class

rootadmin

(rolename : string)

: roleoperation

}

第二步、對上面不同角色進行聚合

class rolefactory

fungetop

(rolename : string)

: roleoperation

}

第三步、借助上面的工廠,呼叫業務邏輯**

/**

* 使用工廠模式

*/funjudgeusefactory

(rolename: string)

: string

這樣的話以後想擴充套件條件也很容易,只需要增加新的許可權**,而不需要動以前的業務**

四、高逼格的策略模式

根據不同的策略物件,發生不同的業務變化,就是策略模式

class

rolecontext

(operation : roleoperation)

}

很明顯上面傳入的引數 operation就是表示不同的「策略」。我們在業務**裡傳入不同的角色,即可得到不同的操作結果

/**

* 使用策略模式

*/funjudgeusecontext

(operation: roleoperation)

: string

五、測試用例
fun

高逼格的block(鏈式程式設計思想 )

鏈式程式設計思想 或許剛接觸這個東西,你說滿臉懵逼的狀態,那麼下面來看一下典型的鏈式程式設計思想的用法 建立控制項 uiview redview uiview alloc init redview.backgroundcolor uicolor redcolor self.view addsubvi...

高逼格UILabel的閃爍動畫效果

高逼格uilabel的閃爍動畫效果 最終效果圖如下 原始碼 yxlabel.h 與 yxlabel.m created by youxianming on 14 8 23.import inte ce yxlabel uiview property nonatomic,strong nsstring...

高逼格UILabel的閃爍動畫效果

高逼格uilabel的閃爍動畫效果 最終效果圖如下 原始碼 yxlabel.h 與 yxlabel.m yxlabel.h created by youxianming on 14 8 23.import inte ce yxlabel uiview property nonatomic,stron...