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

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

策略模式是为了解决在做同一件事的时候,存在多种可能发生情况问题。

什么是策略模式

什么时候使用

如何使用

优缺点是什么


使用场景

一个商场中,针对不同的消费者,进行不同的消费打折促销,普通消费者打9.8折,VIP用户打8折,SVIP用户打7.5折,针对打折这件事,存在三种情况需要考虑,针对不同的人,使用不同的计算方式。这里就要使用策略模式去解决。

要素

  1. 针对问题的一个接口

  2. 接口的多种策略实现

  3. 一个接口的调用方

使用

/** * Created by 迹_Jason on 2017/6/24. * 策略模式接口 */public interface Discount {    Double discountMoney(Double total);}
/** * Created by 迹_Jason on 2017/6/24. * 普通消费者打折力度 */public class CommonConsumerDiscount implements Discount {    public Double discountMoney(Double total) {        return total * 0.98;    }}
/** * Created by 迹_Jason on 2017/6/24. * svip打折力度 */public class SvipConsumerDiscount implements Discount {    public Double discountMoney(Double total) {        return total * 0.75;    }}
/** * Created by 迹_Jason on 2017/6/24. * vip打折力度 */public class VipConsumerDiscount implements Discount {    public Double discountMoney(Double total) {        return total * 0.8;    }}
/** * Created by 迹_Jason on 2017/6/24. * 调用策略接口 */public class SumMoney {    Double sum(Discount consumerType) {        Double total = 7 * 2 + 5.3 * 8;        return consumerType.discountMoney(total);    }    public static void main(String[] args) {        Discount consumerType = new CommonConsumerDiscount();        SumMoney sumMoney = new SumMoney();        System.out.println(sumMoney.sum(consumerType));    }}

优点

程序更加灵活,拓展性更好,可读性也更好

可以替换if-else语句的使用

缺点

必须知道有哪些策略类,每个策略类的功能

如果策略很多,产生的策略实现类也非常多

转载地址:http://alzzl.baihongyu.com/

你可能感兴趣的文章
Centos 学习大纲
查看>>
常见的JavaScript易错知识点整理
查看>>
RagingWire战略重点批发数据中心服务
查看>>
数据中心的规模是否影响虚拟化DCIM的决策?
查看>>
后流量时代,世间再无电信运营商
查看>>
李开复:钉钉是大胆的突破式创新
查看>>
夏普欲收回美洲品牌授权 海信总裁:严格按照合同办
查看>>
大数据市场迎来扩容期 本土内存数据库抢位崛起
查看>>
IPython4_Notebook
查看>>
rac问题思考总结
查看>>
Android 自定义View总结
查看>>
.NET平台开源项目速览(5)深入使用与扩展SharpConfig组件
查看>>
u-boot-1.3.4 移植到S3C2440
查看>>
HotSpot运行时概览#2
查看>>
Go结构体标签表达式v1.0发布,参数校验杀手锏
查看>>
对react中setState的总结
查看>>
[回炉计划]-实现一个图片预加载
查看>>
正则表达式
查看>>
360前端星计划学习-html
查看>>
专注dApp高效执行和高并发的下一代公有链
查看>>