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元 

  

 

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