策略模式

1.行为类

  具体的打折的计算的接口和实现类

 

public interface Discount {
    public Double calculatePrice(Double price);
}


public class ChilderDiscount implements Discount {

    @Override
    public Double calculatePrice(Double price) {
        return price - 10;
    }

}

public class StudentDiscount implements Discount {

    @Override
    public Double calculatePrice(Double price) {
        return price * 0.8;
    }

}


public class VipDiscount implements Discount{

    @Override
    public Double calculatePrice(Double price) {
        System.out.println("增加积分");
        return price * 0.5;
    }
    
}

 

 

public class MovieTicket {
    private Discount dis;
    public Double price;
    
    public void setDis(Discount dis){
        this.dis = dis;
    }
    
    public Double getPrice(){
        return dis.calculatePrice(price);
    }
}


2.程序入口

 

public class M {
    public static void main(String[] args) {
        Discount dis_children = new ChilderDiscount();
        Discount dis_student = new StudentDiscount();
        
        MovieTicket mt = new MovieTicket();
        
        mt.setDis(dis_student);
        mt.price = 100d;
        Double d = mt.getPrice();
        System.out.println("原价100 学生价格是:" + d);
        
        mt.setDis(dis_children);
        mt.price = 100D;
        System.out.println("原价100 儿童价格是:" + mt.getPrice());
        
    }
}

 

 

 

 

 

策略模式的使用场景
 需求场景:电影票类,对待不同的用户(儿童、学生、vip、正常成年人票价),若我们把逻辑都放到movieTicket类中实现,那么,如果我们新增了一个用户类型,这样的话,需要修改movieTicket代码,不符合开闭原则。
 我们可以把用户抽象出一个类,这个类的实现类负责处理不同身份的具体处理逻辑。我们在movieTicket类中,只需要根据传入的discount接口的实现类的逻辑来处理即可。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值