日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句

發布時間:2023/12/3 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《java開發手冊》中:

況且日常開發時遇到一推的if-else著實讓人頭疼!

so,現在開始改造

一、衛語句

衛語句就是把復雜的條件表達式拆分成多個條件表達式,即代碼邏輯先考慮失敗、異常、中斷、退出等直接返回的情況,以方法多個出口的方式,解決代碼中判斷分支嵌套的問題,這是逆向思維的體現

比如:

if (type == 0) {

code...

}else if (type == 1) {

code...

} else if (type == 2) {

code...

} else {

otherCode...

}

可以改造為:

if (type == 0) {

code...

return;

}

if (type == 1) {

code...

return;

}

if (type == 2) {

code...

return;

}

otherCode....

二、策略模式

現在有個需求,根據用戶的類型來展示不同的內容,我們將其具體化為一段代碼:

if ("新客戶".equals(userType)) {

showNewContent...;

}else if("VIP客戶".equals(userType)){

showVIPContent...;

}else if ("白金客戶".equals(userType)) {

showPlatinaContent...;

}else if ("黑卡用戶".equals(userType)){

showBlackCardContent...;

}else if ("回歸用戶".equals(userType)){

showComeBackContent...;

}else {

showOtherContent...;

}

這樣看是看不出來有何不妥的,但是想想,要推薦的內容何止這么點代碼,如果不管不顧,就這么寫,到時候寫完代碼回過頭來,自己都得看老半天才能看懂,何論后期維護的人呢,而且要是后期又添加了一種新的用戶類型,那是不是又要寫一個else-if插在中間,然后又增量添加一推代碼,這樣豈不是太麻煩了?,反正強迫癥肯定是受不了的

策略模式改造:

1.定義一個策略接口

public interface ShowStrategy{

void showContentByUserType();

}

2.定義多個具體的策略實現

public class ShowNewContentStrategy implements ShowStrategy {

@Override

public void showContentByUserType() {

System.out.println("展示新用戶內容");

}

}

public class ShowVIPContentStrategy implements ShowStrategy {

@Override

public void showContentByUserType() {

System.out.println("展示VIP用戶內容");

}

}

public class ShowPlatinaContentStrategy implements ShowStrategy {

@Override

public void showContentByUserType() {

System.out.println("展示白金用戶內容");

}

}

public class ShowBlackCardContentStrategy implements ShowStrategy {

@Override

public void showContentByUserType() {

System.out.println("展示黑卡用戶內容");

}

}

public class ShowComeBackContentStrategy implements ShowStrategy {

@Override

public void showContentByUserType() {

System.out.println("展示回歸用戶內容");

}

}

3.定義一個策略使用的client

public class ShowStrategyClient {

//持有一個策略接口引用

private ShowStrategy showStrategy;

//注入

public ShowStrategyClient(ShowStrategy showStrategy) {

this.showStrategy = showStrategy;

}

//策略client的方法

public void clientMethod(){

showStrategy.showContentByUserType();

}

}

4.外部使用

回到我們的需求,用寫好的策略模式重構

public void test() {

//1.創建新用戶的內容展示策略

ShowStrategy newContentStrategy = new ShowNewContentStrategy();

//2.創建策略客戶端,注入新用戶策略實現

ShowStrategyClient showStrategyClient = new ShowStrategyClient(newContentStrategy);

showStrategyClient.clientMethod();

}

三、狀態模式

繼續引用我們在“二、策略模式”中的例子

狀態模式改造:

1.定義一個狀態行為接口

interface UserState {

void showNewContent(ShowStateClient client);

void showVIPContent(ShowStateClient client);

void showPlatinaContent(ShowStateClient client);

void showBlackCardContent(ShowStateClient client);

void showComeBackContent(ShowStateClient client);

}

2.定義多個具體的狀態實現

public class ShowNewContentState implements UserState {

@Override

public void showNewContent(ShowStateClient client) {

System.out.println("展示新用戶內容");

}

@Override

public void showVIPContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showPlatinaContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showBlackCardContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showComeBackContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

}

public class ShowVIPContentState implements UserState {

@Override

public void showNewContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showVIPContent(ShowStateClient client) {

System.out.println("展示VIP用戶內容");

}

@Override

public void showPlatinaContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showBlackCardContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showComeBackContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

}

public class ShowPlatinaContentState implements UserState {

@Override

public void showNewContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showVIPContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showPlatinaContent(ShowStateClient client) {

System.out.println("展示白金用戶內容");

}

@Override

public void showBlackCardContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showComeBackContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

}

public class ShowBlackCardContentState implements UserState {

@Override

public void showNewContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showVIPContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showPlatinaContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showBlackCardContent(ShowStateClient client) {

System.out.println("展示黑卡用戶內容");

}

@Override

public void showComeBackContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

}

public class ShowComeBackContentState implements UserState {

@Override

public void showNewContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showVIPContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showPlatinaContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showBlackCardContent(ShowStateClient client) {

System.out.println("用戶狀態錯誤");

}

@Override

public void showComeBackContent(ShowStateClient client) {

System.out.println("展示回歸用戶內容");

}

}

3.定義一個狀態使用的client

public class ShowStateClient {

private UserState userState;

public void setUserState(UserState userState){

this.userState = userState;

}

public UserState getUserState(){

return userState;

}

public void showNewContent() {

userState.showNewContent(this);

}

public void showVIPContent() {

userState.showVIPContent(this);

}

public void showPlatinaContent() {

userState.showPlatinaContent(this);

}

public void showBlackCardContent() {

userState.showBlackCardContent(this);

}

public void showComeBackContent() {

userState.showComeBackContent(this);

}

}

4.外部使用

public static void main(String[] args) {

ShowStateClient client = new ShowStateClient();

client.setUserState(new ShowNewContentState());

client.showNewContent();

client.showVIPContent();

client.showPlatinaContent();

client.showBlackCardContent();

client.showComeBackContent();

}

個人覺得狀態模式過于臃腫,用處反而沒有特別突出,不過也許是我沒有遇到合適的場景或者理解有誤吧!

標簽:語句,void,System,模式,用衛,client,println,ShowStateClient,public

來源: https://www.cnblogs.com/yibeijingdoujiang/p/11393380.html

總結

以上是生活随笔為你收集整理的else 策略模式去掉if_如何用卫语句、策略模式、状态模式重构if-else语句的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。