java: Strategy Pattern
/**
* 版权所有 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元
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号