使用 策略模式 解決if判斷問題

2021-10-06 14:47:50 字數 3285 閱讀 8120

1.現在有乙個需求,根據不同的傳參paycode選擇不同的支付模式 ,

常見的if判斷如下

public string topayhtml(string paycode)else if ("weixin_pay".equals(paycode))else if ("xiaomi".equals(paycode))

return null;

}

1.定義介面, 定義共同行為方法

public inte***ce paystrategy
public class alipaystrategy implements paystrategy 

}

public class weixinpaystrategy implements paystrategy 

}

public class xiaomipaystrategy implements paystrategy 

}

3.定義列舉型別,存放所有策略的實現

//策略列舉類,存放所有策略的實現

public enum payenumstrategy

public string getclassname()

public void setclassname(string classname)

//class完整位址

private string classname;

}

4.使用工廠初始化實現策略ben,獲取具體策略實現

public class strategyfactory  catch (exception e) }}

5.定義上下文,獲取具體實現策略,並執行對應策略

@component

public class paycontextstrategy

paystrategy paystrategy = strategyfactory.getpaystrategy(paycode);

if(paystrategy==null)

return paystrategy.topayhtml();}}

6.測試

1.定義介面, 定義共同行為方法

public inte***ce paystrategy
@component

public class alipaystrategy implements paystrategy

}

@component

public class weixinpaystrategy implements paystrategy

}

@component

public class xiaomipaystrategy implements paystrategy

}

3.資料庫儲存所有策略實現,後期可配置控制是否開啟處理

create table `strategy` (

`id` int(11) not null auto_increment comment '主鍵id',

`change_name` varchar(50) default null comment '名稱',

`change_id` varchar(50) default null comment 'key_id',

`change_ben_name` varchar(255) default null comment '實現類名',

4.編輯策略上下文,獲取具體策略

@component

public class paycontextstrategy

//查詢資料庫獲取pay策略實體

if(paystrategyentity==null)

//獲取執行策略的類名-首字母小寫

string changebenname = paystrategyentity.getchangebenname();

if(stringutils.isempty(changebenname))

//通過spring找到策略ben物件

paystrategy paystrategy = springutils.getbean(changebenname, paystrategy.class);

//執行策略

return paystrategy.topayhtml();}}

5.spring上下文獲取spring注入ben物件工具類

//spring上下文中獲取ben物件

@component

@override}}

}//通過name獲取 bean.

public static object getbean(string name)

//通過class獲取bean.

public static t getbean(classclazz)

//通過name,以及clazz返回指定的bean

策略模式 反射 解決多重if else if問題

需求 商品有三種折扣價,普通客戶不享受任何優惠,vip客戶享受9折優惠,超級vip客戶享受8折優惠 當沒有用到設計模式時,我們一般會採用下面的方式處理業務 int type 1 if type 1 else if type 2 else if type 3 這樣做的好處是直觀,能以下看懂其中的邏輯關...

策略模式簡單使用

在設計賬戶系統的過程中遇到這樣乙個問題,就是當第三方賬戶需要根據第三方賬戶的型別來當前的使用者id和第三方的unionid進行乙個繫結操作。如果一般的做法呢就是寫很多的if else通過判斷不同的賬戶型別,來決定進行哪種第三方繫結的操作。下面是使用策略模式的做法,下面 演示,只需關注策略模式的流程和...

使用策略模式消除if else

最近專案中遇到如下情況 有乙個操作叫平帳,然後要對多個不同的款項進行平帳,目測有72種。然後平帳的方法只有乙個,在那個平帳方法裡面,判斷是哪一種款項,然後不同的款項有不同的處理邏輯。if 款項a if 款項b if 款項c 這個就很可怕了。因此使用策略模式來消除掉if else。先看使用策略模式之後...