温习:策略模式

原创 2017年01月03日 10:10:44

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

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

举个栗子:

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

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

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

#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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

delphi xe7 下实现的策略模式例子

  • 2017年06月26日 14:36
  • 3.01MB
  • 下载

策略模式例子

  • 2015年03月24日 16:55
  • 8KB
  • 下载

Java经典编程300例之实例064 策略模式的简单应用

实例说明 在使用图像处理软件处理图片后,需要选择一种格式进行保存,然而各种格式在底层实现的算法并不相同,这刚好适合策略模式。本实例将演示如何使用策略模式与简单工厂模式组合进行实例开发。   实现...

策略模式Demo

  • 2017年01月08日 18:31
  • 6KB
  • 下载

HeadFirst策略模式

  • 2015年09月02日 11:09
  • 1.69MB
  • 下载

iOS策略模式的简单应用

在iOS开发中,使用官方框架,官方sdk中,可以接触到不少设计模式,可能平时没有注意,实际上已经用到了不少设计模式 下面举一个例子:         策略模式:至于什么是策略模式,请自己百...

软件测试之策略模式

  • 2013年06月18日 08:25
  • 14KB
  • 下载

策略模式(StrategyPattern)

策略模式 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立与使用算法的客户; 说起设计模式之前,我们在OOP时最多使用到的特性无外乎是抽象、组合、继承、多态,这些特性可以...

C++ 写的策略模式 2

  • 2014年04月30日 11:05
  • 45KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:温习:策略模式
举报原因:
原因补充:

(最多只允许输入30个字)