zoukankan      html  css  js  c++  java
  • 设计模式开始--策略模式

    策略模式

    作用:

    策略模式是一种定义了一系列算法的方法,所有这些算法都是完成相同的工作,只是实现不同,他可以以相同的方式调用所有的算法。策略模式很容易理解,即便没有学习过设计模式,在实际问题也可以想出这种模式来解决问题。

    相比工厂模式而言:

    • 工厂模式的作用在于实例化对象,它不会包含对象的操作
    • 策略模式中,再一次进行了封装,不仅在自己的类中实例化算法,并且有算法的操作。再次在客户端进行了封装,使客户端的代码更加简单明了了。

    类图:

    实现:

     1、CashSuper算法的形式

    public abstract class CashSuper {
        public abstract double getCash(double money);
    }
    View Code

    2、三个继承的算法

    public class CashRebate extends CashSuper {
        private double rebate = 1;
        public CashRebate(double rebate)
        {
            this.rebate = rebate;
        }
        @Override
        public double getCash(double money) {
            // TODO Auto-generated method stub
            return money * rebate;
        }
    }
    public class CashReturn extends CashSuper {
        private double condition = 0;
        private double moneyReturn = 0;
        public CashReturn(double condition, double moneyReturn)
        {
            this.condition = condition;
            this.moneyReturn = moneyReturn;
        }
        @Override
        public double getCash(double money) {
            if(money >= this.condition)
            {
                money -= Math.floor(money/condition)*moneyReturn;
            }
            return money;
        }
    }
    public class NormalCash extends CashSuper {
        @Override
        public double getCash(double money) {
            // TODO Auto-generated method stub
            return money;
        }
    }
    View Code

    3、用于实例化算法和调用算法操作的context类

    public class CashContext {
        CashSuper cs = null;
        public CashContext(String type)
        {
            switch(type)
            {
                case "normal":
                    cs = new NormalCash();
                    break;
                case "rebate":
                    cs = new CashRebate(0.8);
                    break;
                case "return":
                    cs = new CashReturn(300,80);
                    break;
            }
        }
        public double getResult(double money)
        {
            return cs.getCash(money);
        }
    }
    View Code

    4、client类,用于测试

    public class Client {
        public static void main(String[] args) {
            String type = "return";
            double money = 400;
            CashContext cc = new CashContext(type);
            System.out.println(cc.getResult(money));
        }
    }
    View Code
  • 相关阅读:
    个人第三次作业——原型设计
    《构建之法》团队作业第一次
    vsCode如何将结果输入到调试控制台
    Beta-冲刺第三天
    Beta版本(有更改)
    Beta冲刺-第二天
    Beta冲刺—第一天
    个人作业-测试
    团队项目—系统设计
    团队项目-需求分析
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4375845.html
Copyright © 2011-2022 走看看