余额宝转出到银行卡要手续费吗 yuebao( 三 )


(7)结果:
此时只有策略模式 , 还没有加入工厂模式
(8)定义一个策略工厂类
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)再看客户端代码
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;}}
运行结果还是一样的就不看了哈
05. 状态模式+工厂模式
状态模式一句话来说就是 , 允许一个对象在其对象内部状态改变时改变它的行为 。具体来讲 , 定义多种状态对象 , 和定义一个行为随着状态对象改变而改变的 context 对象 。
(1)面向接口编程 , 定义一个支付接口
public interface PayState {String pay(PayContext payContext);}
(2)定义一个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)定义具体的状态类
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)客户端
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)结果:
此时仅仅是状态模式 , 没有彻底取消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)再看客户端代码
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);}}

推荐阅读