博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式Strategy (分离算法,选择实现)
阅读量:6149 次
发布时间:2019-06-21

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

  hot3.png

一:使用场景

假如领导要让我们做个报价方案。

那我们可定会有这样的情况,

1.新用户或者普通用户,报市场价

2.老用户给9.5折

3.优质客户或大客户给9折

二:不用设计模式,普通我们的 开发代码

/** * 报价管理不同等级的用户,价格不一样 * @author dy * @since 2016-08-10  & JDK 1.8.0_91 */public class Price_ {    /**     * 这里不用设计模式的解决方案     */    public double quote(double goodPrice,String customerType){        switch (customerType){            case "普通客户":                return goodPrice;            case "老客户":                return goodPrice*0.95;            case "大客户":                return goodPrice*0.90;            default:                return goodPrice;        }    }}

作为一个老鸟程序员,不用多说这样写可定code review 过不去,可能会被吐槽...

三,解决方案,这里我们引入策略模式,

下面是策略模式的结构和说明:

四:我们用策略模式实现报价管理

/** * 报价管理不同等级的用户,价格不一样 * * @author dy * @since 2016-08-10  & JDK 1.8.0_91 */public class Price {        // 上下文对象,通常持有一个具体策略对象    private Strategy strategy;    public Price(Strategy strategy) {        this.strategy = strategy;    }    /**     * 用设计模式的解决方案     */    public double quote(double goodPrice){        return this.strategy.calcPrice(goodPrice);    }}
/** * 策略接口 * @author dy * @since 2016-08-10  & JDK 1.8.0_91 */public interface Strategy {    /**     * 某算法接口     */    void algorithmInteface();    /**     * 计算价格     * @param goodPrice     * @return     */    double calcPrice(double goodPrice);}
public class NormalCustomerStrategy implements Strategy {    @Override    public void algorithmInteface() {    }    @Override    public double calcPrice(double goodPrice) {        return goodPrice;    }}
public class OldCustomerStrategy implements Strategy {    @Override    public void algorithmInteface() {    }    @Override    public double calcPrice(double goodPrice) {        return goodPrice*0.95;    }}
public class BigCustomerStrategy implements Strategy {    @Override    public void algorithmInteface() {    }    @Override    public double calcPrice(double goodPrice) {        return goodPrice*0.90;    }}
/** * @author dy * @since 2016-08-10  & JDK 1.8.0_91 */public class Client {    public static void main(String[] args) {        double goodsPrice = 1000;//商品市场价        Strategy strategy = new BigCustomerStrategy();//商品策略        Price ctx = new Price(strategy);//上下文        System.out.println(ctx.quote(1000));//对应报价    }}

五:

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而使得程序结构更加灵活,具有更好的维护性和扩展性。

转载于:https://my.oschina.net/dyyweb/blog/730660

你可能感兴趣的文章
[20170628]12C ORA-54032.txt
查看>>
除以2
查看>>
高可用集群原理解析
查看>>
Nginx配置URL转向tomcat
查看>>
极客Web前端开发资源大荟萃#001
查看>>
让div固定在某个位置
查看>>
Java开发环境Docker镜像
查看>>
从无到有,WebService Apache Axis2初步实践
查看>>
任务调度(一)——jdk自带的Timer
查看>>
UIKit框架(15)PCH头文件
查看>>
整理看到的好的文档
查看>>
Linux磁盘管理和文件系统管理
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>