标签:设计 解析算法 round logs 模式 微信支付 tom code 客户
策略模式就是提供一组固定算法的策略,客户根据自己的需求选择其中一种策略进行执行。
特点:
场景:
实现方式案例:(实现易扩展,屏蔽if_else_if)
代码:
定义登录策略:
package com.kancy.pattern.strategy; public interface LoginStrategy { public void login(); }
package com.kancy.pattern.strategy; public class QQLoginStrategy implements LoginStrategy{ @Override public void login() { System.out.println("用户选择QQ登录方式登录!"); } }
package com.kancy.pattern.strategy; public class WXLoginStrategy implements LoginStrategy { @Override public void login() { System.out.println("用户选择微信登录方式登录!"); } }
package com.kancy.pattern.strategy; public class DefaultLoginStrategy implements LoginStrategy { @Override public void login() { System.out.println("用户选择默认的用户名和密码的形式登录!"); } }
用户登录服务:
package com.kancy.pattern.strategy; public class LoginService { public void login(String loginType){ LoginStrategy loginStrategy = LoginStrategyType.getLoginStrategy(loginType); loginStrategy.login(); } }
注册策略,统一管理
package com.kancy.pattern.strategy; public enum LoginStrategyType { QQ("qq", new QQLoginStrategy()), WX("wx", new WXLoginStrategy()), DEFAULT("default", new DefaultLoginStrategy()); private String loginType; private LoginStrategy loginStrategy; LoginStrategyType (String loginType, LoginStrategy loginStrategy){ this.loginType = loginType; this.loginStrategy = loginStrategy; } /** * 通过标志来获取对应的登录策略,扩展新的登录策略只需要更改策略注册 * @param name * @return */ public static LoginStrategy getLoginStrategy(String name) { LoginStrategyType[] values = values(); for (LoginStrategyType strategy:values ) { if(strategy.getLoginType().equals(name)){ return strategy.getLoginStrategy(); } } return null; } public String getLoginType() { return loginType; } public LoginStrategy getLoginStrategy() { return loginStrategy; } }
用户选择一种策略进行登录:
package com.kancy.pattern.strategy; public class UserLogin { public static void main(String[] args) { LoginService loginService = new LoginService(); loginService.login("qq"); } }
标签:设计 解析算法 round logs 模式 微信支付 tom code 客户
原文地址:https://www.cnblogs.com/kancy/p/10230969.html