首页 > 其他 > 详细

设计模式——策略模式

时间:2014-02-11 08:38:27      阅读:397      评论:0      收藏:0      [点我收藏+]

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

 

设计一个有多种优惠活动的收银台,则会用到策略模式。

  输入产品单价、产品数量,产品的优惠活动,得出总价。

 

对应的策略模式类图如下:

  bubuko.com,布布扣

bubuko.com,布布扣
package sf.strategy;

public class CashierActivityWrapper {
    public enum ACTIVITY_ENUM {
        COMMON,
        DISCOUNT,
        RETURN
    };

    CashierActivity activity;

    public CashierActivityWrapper(ACTIVITY_ENUM activityEnum) {
        switch (activityEnum) {
        case DISCOUNT:
            activity = new CashierActivity.CashierActivityDiscount(0.8f);
            break;
        case RETURN:
            activity = new CashierActivity.CashierActivityReturn(300, 100);
            break;
        default:
            activity = new CashierActivity.CashierActivityCommon();
            break;
        }
    }
    
    public float getPrice(float price, int count) {
        return this.activity.getPrice(price, count);
    }
}
bubuko.com,布布扣
bubuko.com,布布扣
package sf.strategy;

public abstract class CashierActivity {
    public abstract float getPrice(float price, int count);

    /**
     * 正常收费
     */
    public static class CashierActivityCommon extends CashierActivity {
        @Override
        public float getPrice(float price, int count) {
            return price * count;
        }
    }

    /**
     * 打折活动
     */
    public static class CashierActivityDiscount extends CashierActivity{
        float discount;

        public CashierActivityDiscount(float discount) {
            this.discount = discount;
        }
        @Override
        public float getPrice(float price, int count) {
            return price * discount * count;
        }
    }

    /**
     * 返利活动
     */
    public static class CashierActivityReturn extends CashierActivity {
        /**
         * 返利条件
         */
        int conditionValue;
        /**
         * 返利价值
         */
        int returnValue;

        public CashierActivityReturn(int conditionValue, int returnValue) {
            this.conditionValue = conditionValue;
            this.returnValue = returnValue;
        }

        @Override
        public float getPrice(float price, int count) {
            float total = price * count;
            return total - ((int)(total / this.conditionValue)) * this.returnValue;
        }
    }
}
bubuko.com,布布扣

设计模式——策略模式

原文:http://www.cnblogs.com/sunnyfarmer/p/3543719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!