zoukankan      html  css  js  c++  java
  • 策略模式

    策略模式

    一、定义:定义一组算法,将每个算法封装起来,并且他们可以相互替换。

    二、特点:行为型模式,封装各种类型的规则,降低算法类和使用算法类之间的耦合。

    三、示例代码,商场的优惠活动,有两种优惠方式,一种是打8折,一种是满500价格减少50。利用了简单工程模式和策略模式相结合。

    //抽象算法类,定义所有支持的算法的公共接口。
    public abstract class CashSuper {
    ​
         abstract double getResult(double price);
    ​
    }
    ​
    
    //具体的算法实现类,打折算法。
    public class CashRebate extends CashSuper {
        double rebate;
    ​
        public CashRebate(double rebate) {
            this.rebate = rebate;
        }
    ​
        @Override
        double getResult(double price) {
            double result;
            result = price * (int) (rebate / 10);
            return result;
        }
    ​
    ​
    }
    
    //具体的算法实现类,返现算法。
    public class CashReturn extends CashSuper {
    ​
        double condition = 0;
        double returnMoney=0;
    ​
        public CashReturn(double condition, double returnMoney) {
            this.condition = condition;
            this.returnMoney = returnMoney;
        }
    ​
        double getResult(double price) {
            double result;
            int w = (int) (condition / returnMoney);
            result = price - w * returnMoney;
            return result;
        }
    }
    ​
    
    //上下文
    public class Context {
        //声明策略对象
        CashSuper cashSuper;
    //利用简单工厂模式创建具体的cashSuper实现类
        public Context(String type) throws Exception {
    ​
            switch (type) {
                case "rebate":
                    cashSuper = new CashRebate(8);
                    break;
                case "return":
                    cashSuper = new CashReturn(500, 60);
                    break;
                default:
                    throw new Exception("没有所需的类型");
    ​
            }
        }
    //利用策略模式,根据具体的策略对象来选择不同的算法。
        public double ContextInterface(double price) {
            return cashSuper.getResult(price);
        }
    ​
    }
    
    //客户端
    public class Client {
    ​
        public static void main(String[] args) throws Exception {
    ​
            double totalPrice = 1000;
            String type = "return";
            Context context = new Context(type);
            totalPrice = context.ContextInterface(totalPrice);
            System.out.println(totalPrice);
    ​
        }
    }
  • 相关阅读:
    显而易见的python
    GitHub 使用教程图文详解
    linux下搭建hexo环境
    linux 删除软链接
    Django2.1入门教程
    windows下安装PyQt4
    python3 Flask安装
    学习之源
    白话C++系列教程
    面试笔试试题精选
  • 原文地址:https://www.cnblogs.com/yfy-/p/11925497.html
Copyright © 2011-2022 走看看