日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
你還想if/else用多久?來學學這幾種改進方式吧

哎,曾幾何時

創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目做網(wǎng)站、成都網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元市南做網(wǎng)站,已為上家服務,為市南各地企業(yè)和個人服務,聯(lián)系電話:18980820575

想當年,其實我也特別鐘情于 if/else連環(huán)寫法,上來就是一頓SAO操作,比如舉個好理解的簡單栗子:

一般來說我們正常的后臺管理系統(tǒng)都有所謂的角色的概念,不同管理員權限不一樣,能夠行使的操作也不一樣,比如:

  • 系統(tǒng)管理員( ROLE_ROOT_ADMIN):有 A操作權限
  • 訂單管理員( ROLE_ORDER_ADMIN):有 B操作權限
  • 普通用戶( ROLE_NORMAL):有 C操作權限

比如一個用戶進來,我們需要根據(jù)不同用戶的角色來判斷其有哪些行為,這時候SAO代碼出現(xiàn)了:

 
 
 
 
  1. public class JudgeRole { 
  2.  public String judge( String roleName ) {  
  3.  String result = "";  
  4.  if (roleName.equals("ROLE_ROOT_ADMIN")) { 
  5.  // 系統(tǒng)管理員有A權限 
  6.  result = "ROLE_ROOT_ADMIN: " + "has AAA permission";  
  7.  } else if ( roleName.equals("ROLE_ORDER_ADMIN") ) {  
  8.  // 訂單管理員有B權限 
  9.  result = "ROLE_ORDER_ADMIN: " + "has BBB permission";  
  10.  } else if ( roleName.equals("ROLE_NORMAL") ) {  
  11.  // 普通用戶有C權限 
  12.  result = "ROLE_NORMAL: " + "has CCC permission";  
  13.  } else {  
  14.  result = "XXX";  
  15.  } 
  16.  return result; 
  17.  } 

這樣當系統(tǒng)里有幾十個角色時,那幾十個 if/else嵌套可以說是非常酸爽了…… 這樣一來非常不優(yōu)雅,別人閱讀起來很費勁;二來則是以后如果再復雜一點,或者想要再加條件的話不好擴展;而且代碼一改,以前的老功能肯定還得重測,豈不瘋了……

所以,如果在不看下文的情況下,你一般會如何去對付這些令人頭痛的if/else語句呢?

當然有人會說用 switch/case來寫是否會優(yōu)雅一些呢?答案是:毛區(qū)別都沒有!

接下來簡單講幾種改進方式,別再 if/else走天下了

有枚舉為啥不用

什么角色能干什么事,這很明顯有一個對應關系,所以學過的枚舉為啥不用呢?

首先定義一個公用接口 RoleOperation,表示不同角色所能做的操作:

 
 
 
 
  1. public interface RoleOperation {  
  2.  String op(); // 表示某個角色可以做哪些op操作 

接下來我們將不同角色的情況全部交由枚舉類來做,定義一個不同角色有不同權限的枚舉類 RoleEnum:

接下來調(diào)用就變得異常簡單了,一行代碼就行了, if/else也灰飛煙滅了:

 
 
 
 
  1. public class JudgeRole {  
  2.  public String judge( String roleName ) { 
  3.  // 一行代碼搞定!之前的if/else沒了! 
  4.  return RoleEnum.valueOf(roleName).op(); 
  5.  } 

而且這樣一來,以后假如我想擴充條件,只需要去枚舉類中加代碼即可,而不是去改以前的代碼,這豈不很穩(wěn)!

除了用枚舉來消除 if/else,工廠模式也可以實現(xiàn)

有工廠模式為啥不用

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

首先,針對不同的角色,單獨定義其業(yè)務類:

接下來再寫一個工廠類 RoleFactory對上面不同角色進行聚合:

接下來借助上面這個工廠,業(yè)務代碼調(diào)用也只需一行代碼, if/else同樣被消除了:

 
 
 
 
  1. public class JudgeRole {  
  2.  public String judge( String roleName ) { 
  3.  // 一行代碼搞定!之前的 if/else也沒了! 
  4.  return RoleFactory.getOp(roleName).op();  
  5.  } 

這樣的話以后想擴展條件也很容易,只需要增加新代碼,而不需要動以前的業(yè)務代碼,非常符合“開閉原則”。

來,我們接著來,除了工廠模式,策略模式也不妨試一試

有策略模式為啥不用

策略模式和工廠模式寫起來其實區(qū)別也不大!

在上面工廠模式代碼的基礎上,按照策略模式的指導思想,我們也來創(chuàng)建一個所謂的策略上下文類,這里命名為 RoleContext:

很明顯上面?zhèn)魅氲膮?shù) operation就是表示不同的“策略”。我們在業(yè)務代碼里傳入不同的角色,即可得到不同的操作結果:


本文名稱:你還想if/else用多久?來學學這幾種改進方式吧
網(wǎng)頁鏈接:http://www.5511xx.com/article/djejsdj.html