常用设计模式-策略模式+工厂模式+模板模式(使用场景、解决方案)
在策略模式+工厂模式中,没有使用到模板模式,因为张三和李四的业务逻辑都是调用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);}
}
常用设计模式-策略模式+工厂模式+模板模式(使用场景、解决方案)相关推荐
- 23种设计模式,今天来聊聊模板模式,工厂方法模式,单例模式。
23种设计模式,今天来聊聊模板模式,工厂方法模式,单例模式. 1. 随处可见的模板模式 2. 暗含讲究的工厂方法模式 3. 单例模式隐含的坑你能看到第几层? 视频讲解如下,点击观看: [干货篇]23种 ...
- [设计模式](十):策略模式(Strategy)与模板模式(Template)详解及二者间区别介绍(两种父子类行为模式)
这次要说的两个模式,都是行为模式,指的是在程序运行过程中,经过经验总结的行为开发模式. 其次,行为模式再按照类与类间关系的划分,可以划分为四个类型:父子关系(2种).独立类间关系(4种).类自身状态( ...
- 常用设计模式-策略模式
模式简介 它定义了算法家族,分别封装起来,让它们间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户. 模式实现 环境类(Context) 用一个ConcreteStrategy对象来配置.维 ...
- 设计模式(初探工厂与代理模式)——学习记录
0 设计模式 一种思维,一种态度,一种进步 1 创建型模式:省去new的过程 单例模式 工厂模式 抽象工厂模式 建造者模式 原型模式. 2 结构型模式: 适配器模式 桥接模式 装饰模式 组合模式 外观 ...
- 模板设计模式_设计模式实用又简单的模板模式
这篇文章纯科普向,如题,对这方面了解的可以绕道了,不耽误大家时间了哈 -----------------------------------人工分割线------------------------- ...
- 常用设计模式系列(四)—建造者模式
第一节 前言 "山不在高,有仙则名.水不在深,有龙则灵.斯是陋室,惟吾德馨.苔痕上阶绿,草色入帘青.谈笑有鸿儒,往来无白丁.可以调素琴,阅金经.无丝竹之乱耳,无案牍之劳形.南阳诸葛庐,西蜀子 ...
- 《JAVA与模式》之模板模式(转载)
模板方法在servlet中的应用:http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 原文出处:http://blo ...
- Java常用设计模式-策略模式
策略模式是一个非常实用的设计模式,指定义了一类算法并将其封装起来,并使得它们之间可以灵活地切换,并且不影响客户端. 1,从一个例子开始 我们常常会在网上买东西,很多购物平台都会有着各种各样的优惠策略供 ...
- 常用设计模式之抽象工厂模式
前面说过了工厂方法模式,工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须 对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工 ...
最新文章
- bats-Bash自动化测试工具
- Object Builder Application Block (2)
- 斜杠的意思是或还是和_开启你的斜杠人生
- 转:华为副总裁一封信:透露年薪千万的工作感悟,太震撼了!
- 史上最严重的忘拿钥匙事件 | 今日最佳
- CMU本科计算机科学,CMU计算机科学学院本科难录吗?
- System.getProperty(属性名)方法的使用
- PyTorch 1.7 发布:支持 CUDA 11、FFT 新 API、及 Windows 分布式训练
- 五合体机器人乐高_又来一波新品,高达、乐高全都有
- 【机器学习-西瓜书】三、逻辑回归(LR);线性判别分析(LDA)
- 利用PCL做点云的平面拟合
- HTML 制作一个通讯录
- 分形理论在图像处理中的应用研究(综述)
- python题目-通过字母判断星期几
- 泊松分布、二项分布与正态分布
- bootstrap datepicker 在bootstrap modal中不显示问题
- 镁光闪存颗粒对照表_内存颗粒型号识别
- vue 项目中 自动生成 二维码
- 小马的白痴日常2019.12.20
- CSS DIV 滚动(CSS,HTML)