偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

開(kāi)發(fā) 后端
一般來(lái)說(shuō)我們正常的后臺(tái)管理系統(tǒng)都有所謂的角色的概念,不同管理員權(quán)限不一樣,能夠行使的操作也不一樣。

哎,曾幾何時(shí)

想當(dāng)年,其實(shí)我也特別鐘情于 if/else連環(huán)寫(xiě)法,上來(lái)就是一頓SAO操作,比如舉個(gè)好理解的簡(jiǎn)單栗子:

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

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

[[285741]]

比如一個(gè)用戶進(jìn)來(lái),我們需要根據(jù)不同用戶的角色來(lái)判斷其有哪些行為,這時(shí)候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權(quán)限 
  6.  result = "ROLE_ROOT_ADMIN: " + "has AAA permission";  
  7.  } else if ( roleName.equals("ROLE_ORDER_ADMIN") ) {  
  8.  // 訂單管理員有B權(quán)限 
  9.  result = "ROLE_ORDER_ADMIN: " + "has BBB permission";  
  10.  } else if ( roleName.equals("ROLE_NORMAL") ) {  
  11.  // 普通用戶有C權(quán)限 
  12.  result = "ROLE_NORMAL: " + "has CCC permission";  
  13.  } else {  
  14.  result = "XXX";  
  15.  } 
  16.  return result; 
  17.  } 

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

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

當(dāng)然有人會(huì)說(shuō)用 switch/case來(lái)寫(xiě)是否會(huì)優(yōu)雅一些呢?答案是:毛區(qū)別都沒(méi)有!

接下來(lái)簡(jiǎn)單講幾種改進(jìn)方式,別再 if/else走天下了

有枚舉為啥不用

什么角色能干什么事,這很明顯有一個(gè)對(duì)應(yīng)關(guān)系,所以學(xué)過(guò)的枚舉為啥不用呢?

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

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

接下來(lái)我們將不同角色的情況全部交由枚舉類來(lái)做,定義一個(gè)不同角色有不同權(quán)限的枚舉類 RoleEnum:

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

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

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

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

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

有工廠模式為啥不用

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

首先,針對(duì)不同的角色,單獨(dú)定義其業(yè)務(wù)類:

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

接下來(lái)再寫(xiě)一個(gè)工廠類 RoleFactory對(duì)上面不同角色進(jìn)行聚合:

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

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

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

這樣的話以后想擴(kuò)展條件也很容易,只需要增加新代碼,而不需要?jiǎng)右郧暗臉I(yè)務(wù)代碼,非常符合“開(kāi)閉原則”。

來(lái),我們接著來(lái),除了工廠模式,策略模式也不妨試一試

有策略模式為啥不用

策略模式和工廠模式寫(xiě)起來(lái)其實(shí)區(qū)別也不大!

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

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

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

你還想if/else用多久?來(lái)學(xué)學(xué)這幾種改進(jìn)方式吧

責(zé)任編輯:趙寧寧 來(lái)源: 今日頭條
相關(guān)推薦

2025-04-21 00:00:05

2016-11-22 16:34:11

githubgit前端

2021-07-27 15:40:39

Python數(shù)據(jù)清洗函數(shù)

2023-09-29 11:29:12

Spring異常處理類

2022-08-29 10:01:59

Vue驗(yàn)證機(jī)制

2020-09-30 16:15:46

ThreadLocal

2021-05-07 16:19:36

異步編程Java線程

2020-09-28 14:24:09

字典Dictionary遍歷

2020-08-26 13:30:18

代碼設(shè)計(jì)模式前端

2017-10-16 16:43:05

數(shù)據(jù)庫(kù)Oracle數(shù)據(jù)丟失

2020-09-23 17:45:46

軟件測(cè)試學(xué)習(xí)技術(shù)

2024-05-10 07:44:23

C#進(jìn)程程序

2022-09-20 14:11:37

JVM調(diào)優(yōu)命令

2020-03-06 11:00:00

戴爾

2024-02-23 08:18:32

首屏產(chǎn)品瀏覽器

2021-11-09 14:08:45

DockerDockerfileJava

2022-05-27 06:57:50

Python循環(huán)方式生成器

2024-02-05 12:08:07

線程方式管理

2015-04-27 13:48:30

手機(jī)解鎖身份識(shí)別

2015-03-17 10:05:04

蘋(píng)果換購(gòu)Android
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)