案例:假如以快餐类为需求。模拟现实业务
方法一:简单工厂+策略模式(采用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 2022/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);}}

策略工厂

@Component
public 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 2022/11/18 9:30*/
public interface Strategy {String price();
}@Service
public class StrategyA implements Strategy{@Overridepublic String price(String type) {return "10";}}@Service
public class StrategyB implements Strategy{@Overridepublic String price(String type) {return "12";}}
@Service
public class StrategyC implements Strategy{@Overridepublic String price(String type) {return "14";}}@Service
public class StrategyD implements Strategy{@Overridepublic String price(String type) {return "16";}}

策略工厂

@Component
public 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());}}

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

  1. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  2. JAVA设计模式之3种工厂模式

    转自 JAVA设计模式之3种工厂模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离.为了使软件的结构更加清晰,外 ...

  3. 【一】Java 设计模式学习记录: 工厂模式

    文章目录 一.设计模式的分类 二.工厂模式 2.1 简单工厂模式 2.1.1 解决的问题 2.1.2 简单工厂模式是什么 2.1.3 优缺点 2.2 工厂方法模式 2.2.1 解决的问题 2.2.2工 ...

  4. 《Java设计模式与实践》——工厂模式

    一直觉得设计模式这个东西只能浮于表面落不了地,毕竟java后端在一般情况下是很少会用到,因为大部分业务逻辑只是很简单的增删改查.最近几天想再回头看看设计模式,突然想到,如果将设计模式的理论与我们平时能 ...

  5. 我以订披萨为例,给朋友详细讲了Java设计模式的3种工厂模式

    摘要:工厂模式是将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性. 本文分享自华为云社区<[Java设计模式]用 披萨订购案例 详 ...

  6. Java设计模式(三)——工厂模式

    工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.**该模式用于封装和管理对象的创建,是一种创建型模式.** ...

  7. JAVA设计模式 - 单例与工厂模式

    前言 设计模式是在前人总结下 , 得出的经验, 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性.继承性和多态性以及类的关联关系和组合关系的充分理解, 接着我们来看设计模式中的两种比较重要的 ...

  8. java设计模式六(抽象工厂模式)

    java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...

  9. Java设计模式:抽像工厂模式

    抽象工厂模式为工厂模式添加了一个抽象层,是创建其它工厂的超级工厂,也称为工厂的工厂. Abstract Factory class diagram /** To change this license ...

  10. 【四】Java设计模式GOF23之抽象工厂模式

    目录 CarFactory.java public interface CarFactory {Engine createEngine();Seat createSeat();Tyre createT ...

最新文章

  1. 感觉没有学会什么真正的本领
  2. python基础教程:函数作用域
  3. 网站建设PHP中mysql和mysqli的区别
  4. Flink countWindow窗口
  5. MOCTF-Web-PHP黑魔法
  6. 【2018.4.21】模拟赛之四-ssl2405 巧克力【实际上是模拟】
  7. IOT(5)---物联网系统框架介绍
  8. 2009年12月8号漕宝路电信机房真是电信封的吗?
  9. echarts中国地图
  10. matlab 报童 泊松分布函数,数学建模和工科数学分析(2)
  11. bind9 域名劫持_域名劫持会怎样?如何解决域名劫持
  12. 双机互联攻略之超强、完全篇!
  13. 【Wordpress主题】Sakuraio主题的使用与优化
  14. 买蓝牙耳机什么牌子好用?国产蓝牙耳机十大排名
  15. win10启用或关闭windows功能空白终极解决办法
  16. 软件测试面试宝典,大厂测试高频面试题详解一网打尽,速看
  17. spring组合注解
  18. System源码浅析- initializeSystemClass(initProperties)
  19. 【数学笔记】信息论基础
  20. 海信用4K激光电视终结大屏娱乐,前景如何?

热门文章

  1. 虚拟服务器只有端口22开放,云服务器只开放22端口
  2. VUE实现搜索框搜索功能
  3. 思科nexus虚拟交换之开机初始化配置(Nexus7K、Nexus5K等)
  4. JAVA 解三或二元一次方程组commons-math包 麻瓜教程
  5. 考研邱关源电路总结第一章
  6. GIS坐标系统(二):地理坐标
  7. 计算机一级电脑在线模拟,2017全国计算机一级考试模拟试题
  8. 原生js验证简洁美观注册登录页面
  9. 实战案例:带你了解并验证基金定投,附Python代码!
  10. 3DSSPP人因工程静态力仿真软件