之后遇到需要根据xxx要做xxxxxx之类的处理的场景时,可以考虑使用策略模式。从策略模式的实际落地来看, 设计模式的使用比较灵活,不一定照搬照抄只使用一种,根据业务场景以及遇到的问题,可以结合其它设计模式一起使用,比如工厂模式。 6、思考: 上面从MQTT中消费消息,然后到后面使用策略模式具体处理中间,有一段前置处理,也...
/*** 策略工厂具体实现**/@Slf4j@Service@RequiredArgsConstructorpublicclassSyncStrategyFactoryImplimplementsSyncStrategyFactory{// 这块可以按Spring Bean别名注入privatefinalMap<String,SyncStrategy>strategyMap;@OverridepublicSyncStrategygetStrategy(IntegertaskType){if(!STRATEGY_MAP.containsKey(taskType)||!strategyM...
通过策略模式(或变种)的应用,实现了面向接口而非实现编程,满足了职责单一、开闭原则,从而达到了功能上的高内聚低耦合、提高了可维护性、扩展性以及代码的可读性。 设计模式是为了帮助我们从复杂的业务场景中解脱出来,提升代码的可读性,可维护性。但是在实际应用过程中也不必拘泥于设计模式本身,也可以结合所使用的框架...
个人认为,策略模式就是对一种行为有不同的“动作”,根据用户的需求进行选择不同的“动作”。 ps:个人认为有点类似于多态。 例子:在商城的购物过程中,针对不同用户有着不同的折扣。譬如,普通用户原价,白银用户9折,黄金用户8折。针对不同的用户有着不同的折扣,这样就可以使用到策略模式。 二、实例运用 商场收银...
在写程序的时候,我们经常会碰到这样的场景:把一堆算法塞到同一段代码中,然后使用if-else或switch-case条件语句来决定要使用哪个算法?这些算法可能是一堆相似的类函数或方法,用以解决相关的问题。比如,一个验证输入数据的例程,数据本身可以是任何数据类型(如NSString、CGFloat等),每种数据类型需要不同的验证算法。如...
策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。封装的策略算法一般是独立的,策略模式根据输入来调整采用哪个算法。关键是策略的实现和使用分离。 实际中的应用 表格formatter Element 的表格控件的 Column 接受一个formatter参数,用来格式化内容,其类型为函数,并且还可以接受几个特定参数,像这...
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
3、使用函数实现策略模式 在传统策略模式中,每个具体策略都是一个类,而且都只定义了一个方法,除此之外没有其他任何实例属性。它们看起来像是普通的函数一样。的确如此,在 Python 中,我们可以把具体策略换成了简单的函数,并且去掉策略的抽象类。 fromcollectionsimportnamedtupleCustomer=namedtuple('Customer','name fi...
1.3 策略模式示例 前面对策略模式的概念和结构进行了介绍,可能还是会感觉有点云里雾里,下面就用具体示例来加深理解。 场景模拟:假设你现在有一条鱼准备烹饪,烹饪的方式有清蒸、烤鱼两种做法,那么我们就可以使用策略模式来得到一条烹饪完成的鱼。 首先我们定义一个烹饪策略类(CookStrategy)并定义 cookFish 方法,然后定...