温习:策略模式

策略模式:将经常变换的部分提取出来,对于调用者,便可动态改变对象的行为,被调用者的管理也会提高效率。

模式的应用,主要为提升对代码的复用、管理、移植。尤其是移植性,创建好的移植性能代码更有助于提升软件开发的意义。

举个栗子:

点菜-》付款-》开发票,这么一个日常的过程,拆解开也可以理解成如下方式

订单-》支付-》生成发票,这样一个流程,也是今天无论消费、金融最普遍的一个流程导向,过程是千变万化,本质还是一样的(不讨论冗余过程,仅仅以模式的角度看下如何实现)

第一步,创建订单,再细化些

#1:定义订单要素

#2:创建订单或者叫execute(现实中创建订单,考虑验证要素很多,暂不扩散思维)

#3:生成订单,返回结果(返回唯一订单编号)

第二步,支付

#1:拿着上一步的订单编号,校验支付基本信息

#2:开始支付或者叫execute(现实情况,支付场景要考虑很多,同步、异步等)

#3:返回支付结果

第三步,生成发票,同样

#1:根据上两步的基本信息,校验

#2:生成发票或者叫execute

#3:打印发票,拿票走人...

可以看出,每个过程都有一些共性,策略模式的应用,可以帮助减少代码的复杂度,省略如if else的使用

首先创建我们最想要的策略接口(实现依赖接口,没有接触过的同学多看看java设计思想),

public interface IProcessor<T>(){

        T execute(Object...params);

}

有了接口,便可实现我们的策略了


1)订单策略

public class BaseOrderProcessor implements IProcessor<Object>(){

        private String name;

        ...

         public Object execute(Object...params){

                verifyData(params);

                ....

                createOrder(params);//创建订单

                ...

         }

}


2)支付策略

public class PayProcessor implements IProcessor<Object>(){

        private String name;

        ...

         public Object execute(Object...params){

                verifyData(params);

                ....

                shortPay(params);//快捷支付

                ...

         }

}


3)发票策略

public class BillProcessor implements IProcessor<Object>(){

        private String name;

        ...

         public Object execute(Object...params){

                verifyData(params);

                ....

                createBillr(params);//创建发票

                ...

         }

}


有了这些工具策略后,就来建个工具箱嘛,毕竟乱丢工具不是什么好习惯

public class ProcessorBox(){

           private IProcessor processor;

           public void setProcessor(IProcessor processor){

                    this.processor=processor;

           }

           public IProcessor getProccessor(){

                        return this.processor;

           }

            public void use(){

                            //校验什么的不要少

                        processor.execute();

            }

}

客户端调用:

ProcessorBox toolBox=new ProcessorBox();

toolBox.setProcessor(new BaseOrderProcessor());

toolBox.use(params);//订单创建


toolBox.setProcessor(new PayProcessor());

toolBox.use(params);//支付

toolBox.setProcessor(new BillProcessor());

toolBox.use(params);//开具发票

再来回想下,策略模式的定义,将经常变换的部分提取出来,对于调用者,便可动态改变对象的行为,被调用者的管理也会提高效率.over


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值