设计模式(二)策略模式

定义

Stragegy, 它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

要点

  • 策略模式是对 算法 的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:"准备一组算法,并将每一个算法封装起来,使得它们可以 互换

UML

strategy
strategy

优点

策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则在具体策略类中提供。由于算法和环境独立开来,算法的增减、修改都不会影响环境和客户端。当出现新的促销折扣或现有的折扣政策出现变化时,只需要实现新的策略类,并在客户端登记即可。

缺点

  • 因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。
  • 在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象。(这本身没有解除客户端需要选择判断的压力,而策略模式与简单工厂模式结合后,选择具体实现的职责也可以由Context来承担,这就最大化的减轻了客户端的压力。),比如以下的实例。

php代码示范

举例说明

  • 商场收银系统,对一件商品有多种促销活动,那么这几种促销活动的算法最终的目的就是为了得到商品最终价钱,它们还可以相互替换。
  • 抽象策略角色 CashSuper,定义了一个公共接口,各种不同的算法以不同的方式实现这个接口。策略类通常由一个接口或者抽象类实现。
  • 具体策略角色CashNormal/CashRebate/CashReturn,实现接口抽象类CashasSuper,提供具体的算法实现。
  • 环境角色 CashContext 持有一个策略类的引用,最终给客户端调用
  • PHP代码例子
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 5,148评论 9 62
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 3,148评论 2 16
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,997评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,198评论 19 139
  • 仰望长长的秋空 一抹抹澄净的蔚蓝 绽放在神秘忧伤的脸 盈盈衣袖底 清清的秋风温柔拂过 似曾牵过我的手 看那沉甸甸的...
    今心如月阅读 209评论 0 4