关闭

温习:策略模式

标签: java策略模式
117人阅读 评论(0) 收藏 举报
分类:

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

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

举个栗子:

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

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

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

#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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4484次
    • 积分:182
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论