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

    /**
     * 策略模式:需求:景点卖票,如果是儿童免票,成人原价,学生半价,如果要实现这个效果,并且将来非常容易拓展,那么就可以使用策略模式,策略模式
     * 就是将不同的算法抽取出来,每个算法都是平行的.跟if--else if--else if一样,每个算法都是互相平行个关系,将来要新增一个算法,只要实现
     * 算法接口就行了;
     * 特点:一个算法接口和多个实现子类,一个上下文类,该类以组合的方式引入一个算法类,通过该算法类调用算法,对外统一暴露上下文类
     *
     */
    
    //算法接口,计算门牌费用
    public interface IStrategy {
        BigDecimal getTicketAmount(BigDecimal originalAmount);
    }
    //成人票价算法
    public class AdualtStrategy implements IStrategy {
        @Override
        public BigDecimal getTicketAmount(BigDecimal originalAmount) {
            System.out.println("普通成人,原价");
            return originalAmount;
        }
    }
    //儿童票价计算
    public class ChildrenStrategy implements IStrategy {
        @Override
        public BigDecimal getTicketAmount(BigDecimal originalAmount) {
            System.out.println("小于1.5米的儿童,免费");
            return BigDecimal.ZERO;
        }
    }
    //学生票价计算
    public class StudentStrategy implements IStrategy {
        @Override
        public BigDecimal getTicketAmount(BigDecimal originalAmount) {
            System.out.println("学生半价");
            return originalAmount.multiply(new BigDecimal("0.5"));
        }
    }
    public class Test {
        public static void main(String[] args) {
            //成人买票
            IStrategy adualt = new AdualtStrategy();
            ContextStragy contextStragy = new ContextStragy();
            contextStragy.setStrategy(adualt);
            System.out.println(contextStragy.getTicketPay(new BigDecimal("300")));
    
            //学生买票
    
            StudentStrategy student = new StudentStrategy();
            contextStragy.setStrategy(student);
            System.out.println(contextStragy.getTicketPay(new BigDecimal("300")));
    
    
        }
    }
    //新增一种策略,不用更改之前的代码,直接创建一个策略实现子类就行了,方便拓展,例如针对老人打2折
  • 相关阅读:
    hdu2066最短路径spfa算法对每个点分别判断0ms过
    关于oj上c++与g++的区别以及一些常见的问题
    hdu1213依旧并查集。求集合的个数
    hdu2112最短路径
    hdu1232最水并查集模版题
    hdu1325最大联通分量+树中点与边数值关系
    hdu2544最短路径spfa模版题
    hdu1856依旧并查集
    hdu1879最小生成树+并查集
    sencha touch 视图(view) show与hide事件探讨
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10929873.html
Copyright © 2011-2022 走看看