博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式—策略模式
阅读量:6859 次
发布时间:2019-06-26

本文共 1655 字,大约阅读时间需要 5 分钟。

什么是策略模式?

    策略模式定义了算法家族,分别封装起来,让它们之间能够相互替换,此模式让算法的变化不会影响到使用算法

的客户。

    策略模式是一种定义一系列算法的方法,从概念上看全部这些算法完毕的都是同样的工作,仅仅是实现不同,它可

以以同样的方式调用全部的算法,降低了各种算法类与使用算法之间的耦合。

策略模式的长处?

    (1)策略模式的Strategy类层为Context类定义了一系列的可供重用的算法和行为。继承有助于析取出这些算法

的公共功能。

    (2)简化了单元測试(每一个算法都有自己的类,能够通过自己的接口单独測试)

策略模式的不足?

    Context中包括了switch语句,改动需求时须要改Context中的代码。(解决的方法,反射技术)

策略模式的使用条件?

    策略模式是用来封装算法的,但在实践中,我们发现能够用它来封装差点儿不论什么类型的规则,仅仅要在分析过程中听

到要在不同一时候间应用不同的业务规则,就能够考虑利用策略模式处理这样的变化的可能性。

    Eg:

    (1)产品之于加减乘除,水果之于苹果梨橘子香蕉,文具之于笔尺刀,这时产品比較详细、有限和没有多个算

法重叠,这时有用简单工厂模式。

    (2)产品之于商场促销中的返利(可为300返100、500返200、10000返500等等无数)、折扣(2折、2.5折、6

折、9折、9.1折等等无数)、正常购买、消费积分(100元10积分、200元30积分等等无数),这时产品构造又多次重

叠,且有在不同一时候刻应用不同的规则时使用策略模式。

策略模式的结构图?

简单工厂与策略模式的差别与联系?

    简单工厂模式仅仅是攻克了对象的创建问题,工厂须要包含全部的产品对象的创建,假设产品对象形式常常变化,

就须要常常修改工厂,以致代码又一次编译。所以策略模式就诞生了,策略模式---它定义了算法家族,分别封装起

来,而不是像简单产品模式一样定义全部的产品类,让他们之间能够互相替换,此模式让算法的变化,不会影响到使

用算法的客户,使客户拥有同样的訪问过程。

简单工厂和策略模式两个核心?

    简单工厂的核心:封装全部的产品对象

    策略模式的核心:封装算法

实战:商场促销系统结构图与代码展示 

    (1)商场促销UML图

    (2)CashContext类中的代码

                        

class CashContext{    CashSuper cs = null;           //声明一个CashSuper变量        public CashContext(string type)    {        switch (type)                //将实例化集体策略的过程由client转移到Context类中,简单工厂的应用        {            case "正常收费":                CashNomal cs0 = new CashNomal();                cs=cs0;                break;            case "满300返100":                CashReturn cr1 = new CashReturn("300","100");                cs = cr1;                break;            case "打8折";                CashRebate cr2 = new CashRebate("0.8");                cs = cr2;                break;        }                public dopuble GetResult(double money)        {            return cs.acceptCash(money);        }    }}

你可能感兴趣的文章
云计算的设计模式(三)——补偿交易模式
查看>>
ACM-凸多边形的计算几何——hrbust1429
查看>>
WPF笔记(2.8 常用的布局属性)——Layout
查看>>
MySQL随机获取数据的方法,支持大数据量
查看>>
【Struts】服务器文件的上传和下载
查看>>
UICollectionView设置item(cell)之间间距为0(紧挨在一起的效果)
查看>>
Nginx 负载均衡
查看>>
从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
查看>>
创业手记 Mr.Hua
查看>>
SpringMVC之Controller传递JSON数据到页面
查看>>
项目管理学习笔记之中的一个.项目管理综述
查看>>
matlab 工具之各种降维方法工具包,下载及使用教程,有PCA, LDA, 等等。。。...
查看>>
C语言 数组之无限循环
查看>>
List与String的相互转换
查看>>
换行符导致的脚本错误调试
查看>>
Android——Android Sutido:[2]导入eclipse项目篇
查看>>
setsockopt之 TCP_KEEPIDLE/TCP_KEEPINTVL/TCP_KEEPCNT
查看>>
typeid详解
查看>>
SQL Server中的Image数据类型的操作
查看>>
Atitit.html css 浏览器原理理论概论导论attilax总结
查看>>