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
  • 相关阅读:
    DXF文件格式理解
    Qt Creator调试命令行参数
    qt编译错误:invalid new-expression of abstract class type "*"
    dxf文件解析库libdxf初探
    ubuntu linux编译libdxfrw
    CAD DWG/DXF文件C++解析库libdxfrw
    AutoCAD版本dxf文件与dxflib解析库支持探索
    Linux 6种日志查看方法(转)
    码率、分辨率、帧率和画质计算单位时间码流大小(转)
    纯手工打造车载车牌识别检测系统(转)
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4375845.html
Copyright © 2011-2022 走看看