策略数量增多(每一个策略类复用性小,如果需要增加算法,就只能新增类)所有的策略类都需要对外暴露(使用的人必须了解使用策略,这个就需要其他模式来补充,比如工厂模式、代理模式)3|0三、代码示例3|11.定义共同的方法和行为package com.ultiwill.strategy; public interface PayStrategy { /** * 共同的行为方法 * @...
2. 工厂方法模式 上面我们讲解了如何使用Spring来声明一个策略模式,那么如何为不同的业务逻辑来注入不同的bean呢,或者说外层的控制逻辑是什么样的,这里我们就可以使用工厂方法模式了。 所谓的工厂方法模式,就是定义一个工厂方法,通过传入的参数,返回某个实例,然后通过该实例来处理后续的业务逻辑。一般的,工厂方法的返...
工厂方法模式(Factory Method Pattern)也被称为多态工厂模式,其定义了一个创建某种产品的接口,但由子类决定要实例化的产品是哪一个,从而把产品的实例化推迟到子类策略模式(Strategy Pattern)定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立于操作者。
策略模式定义了一系列算法,将每个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。 2. 策略模式示例 // 策略接口publicinterfaceStrategy{voidexecute();}// 具体策略 ApublicclassConcreteStrategyAimplementsStrategy{@Overridepublicvoidexecute(){System.out.println("执行策略 A");}}//...
// 定义一个方法,把策略交给子类去实现。 interface ICompanyCommonService{ Resp hander(req); } 前面商户A和商户B还是不变,使用抽象类AbstractCompanyCommonService的模板,模板不满足商户C,商户C只能自己去实现咯,各个子类自己去实现的行为,就是策略模式的体现呢,如下:CompanyCServiceImpl extends Abstract...
2、工厂模式 工厂方法模式比较简单,直接上代码: publicabstractclassProduct{publicabstractvoidmethod();}publicclassProductAextendsProduct{@Overridepublicvoidmethod(){System.out.println("i am a");}}publicclassProductBextendsProduct{@Overridepublicvoidmethod(){System.out.println("i am B");}}publicabstract...
点击切换到全屏模式,点击切换回正常模式 在这个阶段,每个支付方式都有自己独立的策略,并通过一个公共接口实现这些策略。现在,我们将用工厂模式来决定用哪种策略。 使用工厂模式选择策略的步骤 在这一阶段,我们可以使用 EnumMap 来使工厂模式变得更简洁和优化。
在实际开发的过程当中,最常用的还是设计模式还是 工厂+模板+策略模式,通过模板抽象出业务流程的通用逻辑固化下来,再使用简单工厂模式生成对应的策略逻辑,将相同流程不同业务场景差异的逻辑封装在特定的策略当中,这样就能对修改关闭,对拓展开放。三剑合璧下来,基本能应付大部分的需求。 实际案例演示 接下来我就用一个通知...
编辑于 2023年06月18日 21:20 最近刚学完设计模式,看完后敲了一遍理下思路,画个图记录一点自己的理解,老师把这几种模式相当于是融合在了一起,一个类身兼数职,还是有学到东西的。如有错误,还请大佬指点一二。 分享至 投诉或建议 评论 赞与转发
public voidisUserVip(){System.out.println("普通用户业务");}} 接下来,我们再定义策略工厂类,用来管理这些勋章实现策略类,如下: //VIP工厂classVipFactory{private static Map<Integer,Vip>map=newHashMap();static{map.put(1,newVipUser());map.put(2,newSVipUser());map.put(3,newCommonUser());}pu...