300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java设计模式之策略模式+工厂模式(优化if-else)

java设计模式之策略模式+工厂模式(优化if-else)

时间:2018-08-17 15:51:36

相关推荐

java设计模式之策略模式+工厂模式(优化if-else)

案例:假如以快餐类为需求。模拟现实业务

方法一:简单工厂+策略模式(采用afterPropertiesSet方法)

//从这里可以看出使用了大量il/else,如果是真实业务//可能每个if/else中又有大量的业务逻辑这样就会显得代码很臃肿String type="";if (type.equals("炒饭")) {System.out.println("10块钱");} else if (type.equals("炒米粉")) {System.out.println("12块钱");} else if (type.equals("炒火腿")) {System.out.println("14块钱");} else if (type.equals("炒粉")) {System.out.println("16块钱");}}

/**

* @Author cgz* @Date /11/18 9:30*///注意需要继承这个InitializingBean或者实现类实现这个InitializingBean才会自动注入Bean//策略模式定义策略public interface Strategy extends InitializingBean{void getDecs();}//这里要让这个bean被扫描到才会自动注册到工厂里//如果需要afterPropertiesSet这个方法启动时久把该类存到内存中还需要加注解,不然spring默认是实例化该方法才会调用到@Service@Lazy(value=false)public class StrategyA implements Strategy{@Overridepublic String price(String type) {return "10";}@Overridepublic void afterPropertiesSet() throws Exception {StrategyFactory.register("炒饭",this);}}@Service@Lazy(value=false)public class StrategyB implements Strategy{@Overridepublic String price(String type) {return "12";}@Overridepublic void afterPropertiesSet() throws Exception {StrategyFactory.register("炒米粉",this);}}@Service@Lazy(value=false)public class StrategyC implements Strategy{@Overridepublic String price(String type) {return "14";}@Overridepublic void afterPropertiesSet() throws Exception {StrategyFactory.register("炒火腿",this);}}@Service@Lazy(value=false)public class StrategyD implements Strategy{@Overridepublic String price(String type) {return "16";}@Overridepublic void afterPropertiesSet() throws Exception {StrategyFactory.register("炒粉",this);}}

策略工厂

@Componentpublic class StrategyFactory {@Autowiredprivate static Map<String, Strategy> strategyMap = new HashMap<>();public static Strategy getInvokeStrategy(String username) {return strategyMap.get(username);}public static void register(String name, Strategy handler) {if (ObjectUtils.isEmpty(name) && handler == null) {return;}strategyMap.put(name, handler);}}

方法二:

* @Author cgz* @Date /11/18 9:30*/public interface Strategy {String price();}@Servicepublic class StrategyA implements Strategy{@Overridepublic String price(String type) {return "10";}}@Servicepublic class StrategyB implements Strategy{@Overridepublic String price(String type) {return "12";}}@Servicepublic class StrategyC implements Strategy{@Overridepublic String price(String type) {return "14";}}@Servicepublic class StrategyD implements Strategy{@Overridepublic String price(String type) {return "16";}}

策略工厂

@Componentpublic class StrategyFactory {@Autowiredprivate static Map<String, Strategy> strategyMap = new HashMap<>();public static Strategy getInvokeStrategy(String username) {return strategyMap.get(username);}//调用工厂得时候放入mapstatic {strategyMap.put("炒饭", new StrategyA());strategyMap.put("炒米粉",new StrategyB());strategyMap.put("炒火腿",new StrategyC());strategyMap.put("炒粉",new StrategyD());}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。