最后,我们创建一个测试类,来验证我们实现的策略模式和 Map 是否正常工作。 publicclassStrategyPatternTest{publicstaticvoidmain(String[]args){Contextcontext=newContext();// 注册策略context.addStrategy("add",newAddStrategy());context.addStrategy("subtract",newSubtractStrategy());context.addStrategy("multiply...
策略模式是一种行为型设计模式,它允许你定义一组算法,将每个算法封装为独立的类,并使它们可以互相替换。它使得算法的实现能够独立于使用它的客户端。 在Java中,策略模式通常涉及以下组件: 上下文(Context):这是包含算法的类,并提供一种设置所需策略的方式。上下文类负责通过委托工作给选定的策略来执行算法。 策略(St...
策略模式:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化。它也被成为政策模式,是一种行为型模式。 介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
其实我们所不满的就是策略模式带来的缺点:1、策略类会增多 2、业务逻辑分散到各个实现类中,而且没有一个地方可以俯视整个业务逻辑 针对传统策略模式的缺点,在这分享一个实现思路,这个思路已经帮我们团队解决了多个复杂if else的业务场景,理解上比较容易,代码上需要用到Java8的特性——利用Map与函数式接口来实现。 ...
使用map 来实现策略模式的优点 策略模式的核心是封装一组算法实现特别是相似的算法实现,所以我们可以通过 map 来进行 KV 的约束,key 是客户端传进来的对应策略,用具体的算法实现 fun() 作为 value,这样无论是算法的封装还是调度都从业务场景中解耦了。
利用map实现策略模式 1. 代码实现 手上有一个工作,要做一个数据库类型转换工具,比如MySQL转ClickHouse,那么这个工具大部分的工作就是在做映射关系的比对。 最初写的代码大概是这个样子的: 代码语言:go 复制 switch(mysqlType){caseMySQLInt:ifcolumn.IsUnsigned{col.Type=UInt32}col.Type=UInt32// 省略大部分...
理,所以利⽤设计模式---策略模式就解决了这个问题。 2基础知识 2.1对@Autowired注解的理解 在平常使⽤中我们对@Autowired都是这样⽤ @Autowired private XXXService service; 解释说明:@Autowired是按照byType注⼊的(即按照bean的类型),当注⼊接⼝的时候我们都知道,他是注⼊的是这个接⼝的实现 ...
解决方案①策略模式 ②Map+Function函数式接口 1.策略模式解决if-else 策略模式是把 if语句里面的逻辑抽出来写成一个类,如果要修改某个逻辑的话, 仅修改一个具体的实现类的逻辑即可,实现可维护性同时增加可扩展性,问题就是:会增加很多冗余的类 示例代码如下:...
Map+函数式接口采用jdk 1.8的函数式编程的新特性,用来实现策略模式,更加简单,更加自由。 同样以旅行为例: publicclassStrategy{@AutowiredprivateTravelServicetravelService;//有返回值用Function接口,无返回值用Consumer接口privateMap<Integer,Consumer<String>>typeMap=newHashMap<>();@PostConstructpublicvoiddispatcherIni...
使用策略模式具有良好的扩展性,兵来将挡,再给我添加十种水果都不怕,水果种类太多会使水果的实现类暴增。现在来一种水果无需在原先的业务类(EatFruit)里修改很多的代码逻辑,只要实现接口并加个条件判断就好了。但是使用策略模式时,我们需要知道具体的实现类,具体的实现类需要对外暴露 ...