在策略模式+工厂模式中,没有使用到模板模式,因为张三和李四的业务逻辑都是调用AAA方法,如果现在在增加一个方法,次方法只需要李四一人去实现BBB方法,此时张三的handel中就会报错,需要张三也去实现BBB方法,这时就出现了模板模式,即将接口变为抽象类,实现自己的方法即可.

优化前后:

 @TestString noDesign2() {String name = "张三";if (name.equals("张三")) {// 业务逻辑Areturn "张三完成任务AAA";} else if (name.equals("李四")) {// 业务逻辑Breturn "李四完成任务BBB";} return "end";}// 工厂 + 策略 + 模板设计模式@Testvoid design2() {String name = "张三";AbstractHandler strategy = Factory2.getInvokeStrategy(name);strategy.AAA(name);//strategy.BBB(name);}

AbstractHandler:

import org.springframework.beans.factory.InitializingBean;/*** 模板方法设计模式*/
public abstract class AbstractHandler implements InitializingBean {public void AAA(String name) {throw new UnsupportedOperationException();}public String BBB(String name) {throw new UnsupportedOperationException();}
}

Factory2:

import com.google.common.collect.Maps;
import org.springframework.util.StringUtils;import java.util.Map;/*** 工厂设计模式*/
public class Factory2 {private static Map<String, AbstractHandler> strategyMap = Maps.newHashMap();public static AbstractHandler getInvokeStrategy(String str) {return strategyMap.get(str);}public static void register(String str, AbstractHandler handler) {if (StringUtils.isEmpty(str) || null == handler) {return;}strategyMap.put(str, handler);}
}

ZhangSanHandler2:

import org.springframework.stereotype.Component;@Component
public class ZhangSanHandler2 extends AbstractHandler {@Overridepublic String AAA(String name) {// 业务逻辑Breturn "张三完成任务B";}@Overridepublic void afterPropertiesSet() throws Exception {Factory2.register("张三", this);}
}

LiSiHandler2:

import org.springframework.stereotype.Component;@Component
public class LiSiHandler2 extends AbstractHandler {@Overridepublic String BBB(String name) {// 业务逻辑Breturn "李四完成任务B";}@Overridepublic void afterPropertiesSet() throws Exception {Factory2.register("李四", this);}
}

常用设计模式-策略模式+工厂模式+模板模式(使用场景、解决方案)相关推荐

  1. 23种设计模式,今天来聊聊模板模式,工厂方法模式,单例模式。

    23种设计模式,今天来聊聊模板模式,工厂方法模式,单例模式. 1. 随处可见的模板模式 2. 暗含讲究的工厂方法模式 3. 单例模式隐含的坑你能看到第几层? 视频讲解如下,点击观看: [干货篇]23种 ...

  2. [设计模式](十):策略模式(Strategy)与模板模式(Template)详解及二者间区别介绍(两种父子类行为模式)

    这次要说的两个模式,都是行为模式,指的是在程序运行过程中,经过经验总结的行为开发模式. 其次,行为模式再按照类与类间关系的划分,可以划分为四个类型:父子关系(2种).独立类间关系(4种).类自身状态( ...

  3. 常用设计模式-策略模式

    模式简介 它定义了算法家族,分别封装起来,让它们间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户. 模式实现 环境类(Context) 用一个ConcreteStrategy对象来配置.维 ...

  4. 设计模式(初探工厂与代理模式)——学习记录

    0 设计模式 一种思维,一种态度,一种进步 1 创建型模式:省去new的过程 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式. 2 结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 外观 ...

  5. 模板设计模式_设计模式实用又简单的模板模式

    这篇文章纯科普向,如题,对这方面了解的可以绕道了,不耽误大家时间了哈 -----------------------------------人工分割线------------------------- ...

  6. 常用设计模式系列(四)—建造者模式

    第一节 前言 "山不在高,有仙则名.水不在深,有龙则灵.斯是陋室,惟吾德馨.苔痕上阶绿,草色入帘青.谈笑有鸿儒,往来无白丁.可以调素琴,阅金经.无丝竹之乱耳,无案牍之劳形.南阳诸葛庐,西蜀子 ...

  7. 《JAVA与模式》之模板模式(转载)

    模板方法在servlet中的应用:http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 原文出处:http://blo ...

  8. Java常用设计模式-策略模式

    策略模式是一个非常实用的设计模式,指定义了一类算法并将其封装起来,并使得它们之间可以灵活地切换,并且不影响客户端. 1,从一个例子开始 我们常常会在网上买东西,很多购物平台都会有着各种各样的优惠策略供 ...

  9. 常用设计模式之抽象工厂模式

    前面说过了工厂方法模式,工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须 对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工 ...

最新文章

  1. bats-Bash自动化测试工具
  2. Object Builder Application Block (2)
  3. 斜杠的意思是或还是和_开启你的斜杠人生
  4. 转:华为副总裁一封信:透露年薪千万的工作感悟,太震撼了!
  5. 史上最严重的忘拿钥匙事件 | 今日最佳
  6. CMU本科计算机科学,CMU计算机科学学院本科难录吗?
  7. System.getProperty(属性名)方法的使用
  8. PyTorch 1.7 发布:支持 CUDA 11、FFT 新 API、及 Windows 分布式训练
  9. 五合体机器人乐高_又来一波新品,高达、乐高全都有
  10. 【机器学习-西瓜书】三、逻辑回归(LR);线性判别分析(LDA)
  11. 利用PCL做点云的平面拟合
  12. HTML 制作一个通讯录
  13. 分形理论在图像处理中的应用研究(综述)
  14. python题目-通过字母判断星期几
  15. 泊松分布、二项分布与正态分布
  16. bootstrap datepicker 在bootstrap modal中不显示问题
  17. 镁光闪存颗粒对照表_内存颗粒型号识别
  18. vue 项目中 自动生成 二维码
  19. 小马的白痴日常2019.12.20
  20. CSS DIV 滚动(CSS,HTML)

热门文章

  1. Verilog中reg和SystemVerilog中logic的区别
  2. ssm毕设项目基于Java的医疗器械销售系统oy281(java+VUE+Mybatis+Maven+Mysql+sprnig)
  3. String的普通方法
  4. Linux内核编译、安装
  5. 51单片机学习笔记-1简介及点灯
  6. 【CH376】关于CH376的一些使用总结
  7. 机器学习之网格搜索调参sklearn
  8. SVN使用教程(详细)
  9. GCC 编译链接命令用法
  10. IPv4与IPv6之间的区别