java: Strategy Patterns

 

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 策略模式 Strategy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc DiscountStrategy.java
 *
 * */


package com.javapatterns.strategy;

import  java.util.*;

/**
 * 抽象
 * @author geovindu
 *
 * */
abstract  public class DiscountStrategy {


    /**
     * 策略方法
     * @return 返回折扣的价格数量
     * */
    abstract public double calculateDiscount();



}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 策略模式 Strategy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc NoDiscountStrategy.java
 *
 * */

package com.javapatterns.strategy;



/**
 * 没有折扣
 * @author geovindu
 *
 * */
public class NoDiscountStrategy extends DiscountStrategy{

    /**
     * 价格
     * */
    private double price = 0.0;

    /**
     *份数
     * */
    private int copies = 0;

    /**
     *
     * @param price 输入 价格
     * @param copies 输入 份数
     *
     * */
    public NoDiscountStrategy(double price, int copies)
    {
       // super();
        this.price = price;
        this.copies = copies;
    }

    /**
     *策略方法
     * @return  返回折扣的价格数量
     *
     * */
    public double calculateDiscount()
    {
        return 0.0;
    }

}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 策略模式 Strategy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc FlatRateStrategy.java
 *
 * */

package com.javapatterns.strategy;
/**
 * 固定费用折扣
 * @author geovindu
 *
 * */
public class FlatRateStrategy extends DiscountStrategy{


    /**
     * 固定的折扣数
     * */
    private double amount;
    /**
     * 价格
     * */
    private double price = 0;
    /**
     *
     * 份数
     * */
    private int copies = 0;

    /**
     *
     * @param price 输入 价格
     * @param copies 输入 份数
     *
     * */
    public FlatRateStrategy(double price, int copies)
    {
        this.price = price;
        this.copies = copies;
    }

    /**
     *取值固定折扣数
     * @return  返回固定值
     *
     * */
    public double getAmount()
    {
        return amount;
    }

    /**
     *赋值固定折扣数
     * @param amount  输入固定折扣数
     *
     * */
    public void setAmount(double amount)
    {
        this.amount = amount;
    }

    /**
     *策略方法
     * @return  返回折扣的价格数量
     *
     * */
    public double calculateDiscount()
    {
        return copies * amount;
    }

}

  

/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 策略模式 Strategy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc PercentageStrategy.java
 *
 * */


package com.javapatterns.strategy;

/**
 * 百分比折扣
 * @author geovindu
 *
 * */
public class PercentageStrategy extends DiscountStrategy{


    /**
     *折扣百份比
     * */
    private double percent = 0.0;
    /**
     *价格
     * */
    private double price = 0.0;
    /**
     *份数
     * */
    private int copies = 0;

    /**
     *
     * @param price 输入 价格
     * @param copies 输入 份数
     *
     * */
    public PercentageStrategy(double price, int copies)
    {
        this.price = price;
        this.copies = copies;
    }

    /**
     *取值百份比
     *
     *
     * */
    public double getPercent()
    {
        return percent;
    }

    /**
     *赋值 百份比的折扣
     * @param percent  输入 百分比
     *
     * */
    public void setPercent(double percent)
    {
        this.percent = percent;
    }

    /**
     *策略方法
     * @return  返回折扣的价格数量
     *
     * */
    public double calculateDiscount()
    {
        return copies * price * percent;
    }

}

  

调用测试:

 //策略模式
            double price=25.0;
            int copies=2;
            NoDiscountStrategy noDiscountStrategy=new NoDiscountStrategy(price,copies);
            double zk=noDiscountStrategy.calculateDiscount();
            FlatRateStrategy flatRateStrategy=new FlatRateStrategy(price,copies);
            flatRateStrategy.setAmount(2.0);
            double zk2=flatRateStrategy.calculateDiscount();
            PercentageStrategy percentageStrategy=new PercentageStrategy(price,copies);
            percentageStrategy.setPercent(0.2);
            double zk3=percentageStrategy.calculateDiscount();
            System.out.println("第一种折扣是:"+zk+"元  第二种折扣是::"+zk2+"  第三种折扣是::"+zk3+"元 ");

  

输出:

第一种折扣是:0.0元  第二种折扣是::4.0  第三种折扣是::10.0元 

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章