前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式——策略模式

设计模式——策略模式

作者头像
迹_Jason
发布2019-05-28 12:32:11
3530
发布2019-05-28 12:32:11
举报
文章被收录于专栏:迹_Jason的AppZone迹_Jason的AppZone

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

什么是策略模式

什么时候使用

如何使用

优缺点是什么


使用场景

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

要素

  1. 针对问题的一个接口
  2. 接口的多种策略实现
  3. 一个接口的调用方

使用

代码语言:javascript
复制
/**
 * Created by 迹_Jason on 2017/6/24.
 * 策略模式接口
 */
public interface Discount {

    Double discountMoney(Double total);
}
代码语言:javascript
复制
/**
 * Created by 迹_Jason on 2017/6/24.
 * 普通消费者打折力度
 */
public class CommonConsumerDiscount implements Discount {
    public Double discountMoney(Double total) {
        return total * 0.98;
    }
}
代码语言:javascript
复制
/**
 * Created by 迹_Jason on 2017/6/24.
 * svip打折力度
 */
public class SvipConsumerDiscount implements Discount {
    public Double discountMoney(Double total) {
        return total * 0.75;
    }
}
代码语言:javascript
复制
/**
 * Created by 迹_Jason on 2017/6/24.
 * vip打折力度
 */
public class VipConsumerDiscount implements Discount {
    public Double discountMoney(Double total) {
        return total * 0.8;
    }
}
代码语言:javascript
复制
/**
 * 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语句的使用

缺点

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用场景
  • 要素
  • 使用
  • 优点
  • 缺点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档