(7)結(jié)果:
此時(shí)只有策略模式 , 還沒(méi)有加入工廠模式
(8)定義一個(gè)策略工廠類(lèi)
public class PayStrategyFactory {private static Map<String, PayStrategy> payTypeMap = new HashMap<>;static {payTypeMap.put(\”1\”,new PayStrategyByBalance);payTypeMap.put(\”2\”,new PayStrategyByYuEBAO);payTypeMap.put(\”3\”,new PayStrategyByHuabei);}public static PayStrategy getPayType(String payType){return payTypeMap.get(payType);}}
(9)再看客戶(hù)端代碼
public class PayStrategyFactoryTest {public static voidmain(String[] args) {PayContext payContext = new PayContext(PayStrategyFactory.getPayType(\”1\”));payContext.executeStrategy;PayContext payContext2 = new PayContext(PayStrategyFactory.getPayType(\”2\”));payContext2.executeStrategy;PayContext payContext3 = new PayContext(PayStrategyFactory.getPayType(\”3\”));payContext3.executeStrategy;}}
運(yùn)行結(jié)果還是一樣的就不看了哈
05. 狀態(tài)模式+工廠模式
狀態(tài)模式一句話來(lái)說(shuō)就是 , 允許一個(gè)對(duì)象在其對(duì)象內(nèi)部狀態(tài)改變時(shí)改變它的行為 。具體來(lái)講 , 定義多種狀態(tài)對(duì)象 , 和定義一個(gè)行為隨著狀態(tài)對(duì)象改變而改變的 context 對(duì)象 。
(1)面向接口編程 , 定義一個(gè)支付接口
public interface PayState {String pay(PayContext payContext);}
(2)定義一個(gè)context上下文
public class PayContext {private PayState payState;public PayContext {this.payState = ;}public void setPayState(PayState payState) {this.payState = payState;}public PayState getPayState {return payState;}}
(2)定義具體的狀態(tài)類(lèi)
public class PayStateByBalance implements PayState {@Overridepublic String pay(PayContext payContext) {System.out.println(\”支付寶余額支付\”);payContext.setPayState(this);return \”支付寶余額支付\”;}}public class PayStateByHuabei implements PayState {@Overridepublic String pay(PayContext payContext) {System.out.println(\”支付寶花唄支付\”);payContext.setPayState(this);return \”支付寶花唄支付\”;}}public class PayStateByYuEBAO implements PayState {@Overridepublic String pay(PayContext payContext) {System.out.println(\”支付寶余額寶支付\”);payContext.setPayState(this);return \”支付寶余額寶支付\”;}}
(3)客戶(hù)端
public class PayStateTest {public static void main(String[] args) throws InterruptedException {PayStateTest payStateTest = new PayStateTest;payStateTest.method(\”1\”);payStateTest.method(\”2\”);payStateTest.method(\”3\”);}public void method(String payType){PayContext context = new PayContext;if (\”1\”.equals(payType)) {PayStateByBalance payStateByBalance = new PayStateByBalance;payStateByBalance.pay(context);}else if(\”2\”.equals(payType)) {PayStateByHuabei payStateByHuabei = new PayStateByHuabei;payStateByHuabei.pay(context);}else if(\”3\”.equals(payType)) {PayStateByYuEBAO payStateByYuEBAO = new PayStateByYuEBAO;payStateByYuEBAO.pay(context);}}}
(4)結(jié)果:
此時(shí)僅僅是狀態(tài)模式 , 沒(méi)有徹底取消if else
(5)加入工廠模式
public class PayStateFactory {private static Map<String, PayState> payTypeMap = new HashMap<>;static {payTypeMap.put(\”1\”,new PayStateByBalance);payTypeMap.put(\”2\”,new PayStateByYuEBAO);payTypeMap.put(\”3\”,new PayStateByHuabei);}public static PayState getPayType(String payType){return payTypeMap.get(payType);}}
(6)再看客戶(hù)端代碼
public class PayStateFactoryTest {public static voidmain(String[] args) {PayContext context = new PayContext;PayStateFactory.getPayType(\”1\”).pay(context);PayStateFactory.getPayType(\”2\”).pay(context);PayStateFactory.getPayType(\”3\”).pay(context);}}
推薦閱讀
- 支付寶賬號(hào)為什么是qq郵箱 什么是qq郵箱
- 山藥木耳可以一起吃嗎寶寶 山藥和木耳能一起吃嗎
- 玉米和南瓜能一起吃嗎寶寶 南瓜和玉米能一起吃嗎
- 原神須彌史萊姆隱藏寶箱在哪-原神須彌史萊姆隱藏寶箱位置介紹
- 暖寶寶輕微燙傷怎么辦,用暖寶寶燙傷后的注意事項(xiàng)
- 天天用暖寶寶暖小肚子 原來(lái)用暖寶寶暖小肚子有這么多好處!
- 比目魚(yú)是多寶魚(yú)嗎
- 寶人拖鞋股票 寶人拖鞋
- 淘寶直播上架寶貝怎么弄
- 2022淘寶天貓雙11活動(dòng)分幾波持續(xù)到幾號(hào)
