一、實況概述
對於多種判斷,在**中遇到的情況太多了,今天我們拿管理員許可權舉個?。
一般來說我們正常的後台管理系統都有所謂的角色概念,不同管理員許可權是不一樣的,能夠行使的操作也不一樣:
乙個使用者登陸進來,我們根據使用者不同角色來判斷哪些行為;
強行**一波:
這種是最順手的, 只要手夠快,腦子都跟不上**;也是平時寫的最多的。
這樣當系統裡有幾十個角色時,那幾十個 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...