温习:策略模式

原创 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


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

Java设计模式之策略模式

本文属于23种设计模式系列。 介绍的是策略模式。
  • jason0539
  • jason0539
  • 2015年04月13日 07:20
  • 33642

设计模式--深度解析策略模式(Strategy Pattern)

前些天网购一本Head First Design Patterns,学习了一下,觉得写的挺好,而且挺有趣的,推荐大家都去买一本,真心不错。在这里我先讲一下,这两天学的,两个常见的设计模式,分别Stra...
  • qq_29282475
  • qq_29282475
  • 2015年12月04日 14:17
  • 3412

strategy策略模式与adapter适配器模式的区别

策略模式:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化; 使用的关键点是面对对象、面向接口编程。举个例子,以武士可以不断更换武器为例...
  • hellbaby666
  • hellbaby666
  • 2013年08月02日 10:20
  • 1511

设计模式实战应用之一:策略模式

策略模式的定义         策略模式是应用最普遍的设计模式之一。Gof 把策略模式归类到对象行为型模式,《设计模式:可复用面向对象软件的基础》对策略模式做出了明确的定义:“Define a fam...
  • defonds
  • defonds
  • 2013年11月19日 22:05
  • 6779

《JAVA与模式》之策略模式——我看过最好的一篇策略模式博文

《JAVA与模式》之策略模式(转载自http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html) 在阎宏博士的《JAV...
  • zhangliangzi
  • zhangliangzi
  • 2016年08月09日 11:30
  • 5833

与spring结合的策略模式

策略模式是23种设计模式之一,客户端通过制定多个算法并且封装,使得不同场景可以使用不同的策略算法。使得程序降低了耦合提高代码的复用性。接下来通过一个简单的实例来说明在实战中如何使用(即使是业务逻辑也是...
  • nethackatschool
  • nethackatschool
  • 2017年04月05日 18:58
  • 1306

【设计模式】策略模式详解

学习设计模式已经有一段时间了,前段时间一直在忙一个安卓的app,没时间更新。今天有点空,本着开源的精神,把策略模式的一些东西分享一下。...
  • H28496
  • H28496
  • 2015年06月07日 20:46
  • 1237

策略模式(政策模式) 策略枚举

策略模式 策略模式定义 Define a familly algorithms, encapsulate each one, and make them interchangeable.(定义一组...
  • fly_air
  • fly_air
  • 2016年09月03日 18:59
  • 698

设计模式之桥梁模式和策略模式的区别

桥接(Bridge)模式是结构型模式的一种,而策略(strategy)模式则属于行为模式。以下是它们的UML结构图。 桥梁模式: 策略模式: 在桥接模式中,Abstraction通过聚合的...
  • xingjiarong
  • xingjiarong
  • 2015年12月16日 21:57
  • 2607

三种工厂模式 和 策略模式 对比

一、引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上B...
  • u014600626
  • u014600626
  • 2016年08月05日 17:18
  • 2893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:温习:策略模式
举报原因:
原因补充:

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