折扣计算策略--设计模式应用
折扣计算,策略模式和装饰模式的具体应用。
?
package org.tang.zjnumall.strategy.discount;import java.math.BigDecimal;public class DiscountCalculator {/** * 折扣策略 */private AbstractDiscountStrategy strategy;public DiscountCalculator(){}/** * * @param strategy 具体折扣策略 */public DiscountCalculator(AbstractDiscountStrategy strategy){this.strategy = strategy;}public AbstractDiscountStrategy getStrategy() {return strategy;}public void setStrategy(AbstractDiscountStrategy strategy) {this.strategy = strategy;}public BigDecimal calculate(){return null;}public static void main(String[] args){BigDecimal price = new BigDecimal("99.99");int copies = 9;BigDecimal percent = new BigDecimal("0.12");BigDecimal discount = new BigDecimal("10");BigDecimal limit = new BigDecimal("100");AbstractDiscountStrategy noDiscount = new NoDiscountStrategy();AbstractDiscountStrategy percentStrategy = new PercentageDiscountStrategy(price, copies, percent);AbstractDiscountStrategy flatRateStrategy = new FlatRateDiscountStrategy(copies, discount);AbstractDiscountStrategy restrictedStrategy = new RestrictedDiscountStrategy(percentStrategy, limit);System.out.println("折扣前总额:"+price.multiply(new BigDecimal(copies)));System.out.println("零折扣策略总折扣额:"+noDiscount.calculateDiscount());System.out.println("折扣率策略总折扣额:"+percentStrategy.calculateDiscount());System.out.println("固定折扣额策略总折扣额:"+flatRateStrategy.calculateDiscount());System.out.println("限制折扣额策略总折扣额:"+restrictedStrategy.calculateDiscount());}}?