可见性得以保障,并不意味着_战略模式并不意味着春天!

可见性得以保障,并不意味着

是的,所以可以说您正在编写一个Spring MVC应用程序,然后您决定:“我想做一些单独的封装算法,这些算法可以互换来执行特定的行为”。

对此的经典回应是“您需要一个战略模式男孩!”。 所以,这就是我所做的,考虑下面的代码…

接口


public interface MealStrategy {cook(Meat meat);
}

首要策略

@Component
public class BurgerStrategy  implements
MealStrategy {@Autowired CookerDao cookeryDao;@Overridepublic void cook(Meat meat) {cookeryDao.getBurger(meat);}
}

下一个策略

@Component
public class SausageStrategy  implements
MealStrategy {@Autowired CookerDao cookeryDao;@Overridepublic cook(Meat meat) {return cookeryDao.getSausage(meat);}
}

上下文...

@Component
@Scope("prototype")
public class MealContext {private MealStrategy mealStrategy;public void setMealStrategy(MealStrategy strategy) {this.strategy = strategy;}public void cookMeal(Meat meat) {mealStrategy.cook;}
}

现在说这个上下文是通过mvc控制器访问的,例如...

@Autowired
private MealContext mealContext;@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Something makeMeal(Meat meat) {mealContext.setMealStrategy(new BurgerStrategy());mealContext.cookMeal(meat);
}

通常,这对于与策略模式一起使用非常有意义。 但是,使一切崩溃的那一行是控制器中的那一行…

mealContext.setMealStrategy(new BurgerStrategy())

这将导致在Spring的应用程序上下文之外创建bean的新实例。 这很好奇,如果您不能使用new来创建新实例,那么应该如何在Spring中实现模式呢? 在StackOverflow上问了这个问题之后,我得出的结论是使用依赖注入模式(根据Spring中的标准自动装配)并进行策略的单独注入。 首先,我需要修改策略,以便它们命名组件。

@Component("burger")
public class BurgerStrategy implements MealStrategy { ... }@Component("sausage")
public class SausageStrategy implements SausageStrategy { ... }

现在在控制器中,我有单独的策略可以使用,因此,除了设置策略外,我还只是选择合适的注入策略。

@Resource(name = "burger")
MealStrategy burger;@Resource(name = "sausage")
MealStrategy sausage;@RequestMapping(method = RequestMethod.POST)
public @ResponseBody Something makeMeal(Meat meat) {burger.cookMeal(meat);
}

参考: 策略模式不适用于Spring! 从我们的JCG合作伙伴 David Gray在Code Mumble博客上获得。

翻译自: https://www.javacodegeeks.com/2013/11/strategy-pattern-aint-meant-for-spring.html

可见性得以保障,并不意味着

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米miuiVS华为鸿蒙,华为鸿蒙2.0 vs 小米MIUI 12.5

原标题:华为鸿蒙2.0 vs 小米MIUI 12.5不久前有媒体在视频中展示了鸿蒙2.0和苹果IOS14两个操作系统下App的启动速度,结果是鸿蒙2.0完胜IOS14。此后不久,该媒体发布了华为鸿蒙2.0和小米MIUI 12.5对比视频。同上次一样,这次依然是选择…

传播时延(propagation delay)与发送时延(transmission delay)

原文: http://wzw19191.blog.sohu.com/135110823.html 传播时延(propagation delay)这个概念,是指电磁信号或者光信号在传输介质中传输的时延,而在光纤或者铜线中,光信号和电磁信号的传播速度都在20万公里/秒以上,在传…

具有MicroProfile配置的可配置JAX-RS ExceptionMapper

当您使用JAX-RS创建REST服务时,通常要么不返回任何内容(例如HTTP 201/2/4等),要么返回某些数据(可能采用JSON格式(因此HTTP 200),或者返回某些异常/错误(例如HTTP 4xx或5…

video.js android,VideoJS + HTML5自动播放失败,适用于Android 2.3+和IOS 4+

我的VideoJS和HTML5项目针对更新的Web浏览器(较新版本的FireFox和Chrome)以及移动浏览器(Android2.3 和IOS4 )。VideoJS HTML5自动播放失败,适用于Android 2.3和IOS 4我希望所有视频在“准备就绪”之后自动播放。我尝试了几种方法(在下面的方法中提到过)&#xff0…

EPS(Evolved Packet System,演进的分组系统)

EPS(Evolved Packet System,演进的分组系统)是3GPP标准委员会在第4代移动通信中出现的概念。可以认为EPSUE(User Equipment,用户设备)LTE(4G接入网部分)EPC(Evolved Pack…

lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑

一、背景介绍项目背景是在界面中弹出一个浮层动画,同时播放一个音效。二、当前实现实现思路比较简单:继承一个DialogFragment,在相关的生命周期方法onViewCreated中调用startLottieAnim进行动画播放,同时监听lottie动画播放的回调…

Ad-hoc

Ad-hoc这个词来源于拉丁语,在百度上解释为“for this purpose only”,在wiki上解释为“for this”,其中文在wiki上被解释成包含特设的、特定目的的(地)、即席的、临时的、将就的、专案的”这么多种含义。在wireless ne…

掌握Java 11的Constantdynamic

为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集。 Java开发人员通常不会注意到此功能,因为它隐藏在Java字节码中。 简而言之,通过使用invokedynamic ,可以将方法调用的绑定延迟到第一次调用之前。…

android5.0 v4a,【图】多图讲解V4A提高G5音效详细步骤(G5音效可以更棒的)

首先感谢论坛前辈,看着你们介绍的方法,我把G5应有的音效搞出来了,效果提升非常明显。(看清了,如果不是非常明显,我也不会费这么大劲在这儿做讲解)。特记录和总结过程如下:1. 安装一键ROOT。2. 安装虚拟按…

feeder link

feeder link: 从一个设在指定的固定点上的地球站到一个空间站,或从一个空间站到一个设在某固定点的地球站的无线电链路,用于除卫星固定业务以外的空间无线电通信业务的

2021年春季学期期末统一考试 中国法制史 试题

2021年7月 一、单项选择题(每小题2分,共20分) 1.商朝法律制度的总称叫做( )。 A.禹刑 B.汤刑 C.汤诰 D.九刑 2.战国时期改“法”为“律”的人是( )。 A.韩非 B.赵鞅 C.商鞅 D.屈原 3.秦始皇和李斯等人取消了世卿世禄分封制,在全国…

怎么在html中加入pjax,pjax加载多说的三种方法

多说官方提供的方法:http://dev.duoshuo.com/docs/50b344447f32d30066000147这里不进行说明,请进入上述链接进行查看。效果说明:进入文章页需要点击按钮,多说评论才会加载出来。方法二民间高手不满足方法一那种需要按一次才能加载…

2021年春季学期期末统一考试 高级财务会计 试题

试卷代号: 1039 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考卷和答题纸后才可离开考场。 二、仔细读懂题…

Multi-commodity Flow Problem

多物网络流问题(Multi-commodity Flow Problem)是多种物品(或货物)在网络中从不同的源点流向不同的汇点的网络流问题。 定义

2021年春季学期期末统.考试 公司概论 试题

试卷代号: 1040 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考卷和答题纸后才可离开考场。 二、仔细读懂题…

生产替代物料_一种替代的多生产者方法

生产替代物料最近在InfoQ上,Aliasei Papou发表了一篇关于他的一些实验的文章 ,该实验在线程之间进行了高性能的消息交换。 本文中有许多示例,但我将重点介绍多生产者案例。 文章显示的一种优化方法是,如果您知道初始化时拥有的生产…

2021年春季学期期末统一考试 金融统计分析 试题(开卷)

试卷代号: 1013 2021年7月 一、单项选择题(每小题2分,共40分。每小题有一项答案正确,请将正确答案的序号填在括号内) 1.以下属于商业银行被动负债的是( )。 A.发行债券 B.同业拆借 C.向中央银行借款 D.存款性负债 2.国…

js清除添加的下拉框html,Html下拉框的定义以及JS、Jquary取值、添加和移除

现在有一idtest的下拉框,怎么拿到选中的那个值呢?分别使用javascript原生的方法和jquery方法//multiply设置可以多行显示,size设置默认显示多少行。text1text2code:一:javascript原生的方法1:拿到select对象: var mys…

信干噪比、信噪比

信干噪比 名词定义 信干噪比SINR(Signal to Interference plus Noise Ratio),指的是系统中信号与干扰和噪声之和的比。 信号是指来自设备外部需要通过设备进行处理的电子信号。 干扰是指系统本身以及异系统带来的干扰,如同频干扰…

MicroProfile在Jakarta EE时代的作用

自创建以来,MicroProfile赢得了广泛的关注,并制定了各种规格。 最初,它的创建是为了在多个供应商的推动下,以更快的速度推进微服务世界的企业Java。 现在,随着在Eclipse Foundation下将Java EE转换为Jakarta EE&#x…