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折
  • 相关阅读:
    关于springMVC的一些常用注解
    关于springMVC的一些xml配置
    关于easyUI的一些js方法
    关于easyUI一些标签的使用
    关于easyUI分页
    P3376 模板网络流
    P1343 地震逃生
    网络流最大流
    python函数知识三 函数名的使用、格式化、递归
    python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/10929873.html
Copyright © 2011-2022 走看看