设计模式(二十二)—— 策略模式(定义、案例分析、特点、缺点)

本文详细介绍了策略模式,包括其定义、一个电影院售票系统的应用场景、模式的特点与缺点。通过策略模式,可以灵活地选择不同的算法策略,避免了大量的if-else语句,同时支持开闭原则。在适当的情景下,如需在多种算法间动态切换,策略模式是一个很好的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

文章内容主要参考了刘伟主编的《设计模式(第2版)》,同时也结合了自己的一些思考和理解,希望能帮到大家。


本篇讲解策略模式。非常常见,也非常简单容易理解。

正文

一、定义

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化。

这个模式使得我们可以在根据环境或者条件的不同选择不同的策略来完成该任务。将解决途径进行封装有利于我们对解决方式的增加或删除。符合开闭原则。

二、情景假设

软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下:
(1) 学生凭学生证可享受票价8折优惠;
(2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠;
(3) 影院VIP用户除享受票价半价优惠外还可进行积分。

三、情景分析

关于上面情景的类图(具体分析在下面)
在这里插入图片描述

抽象策略类Discount

public interface Discount{
   
	public double calculate(double price);
}

三个具体策略类


//学生优惠
public class StudentDiscount implements Discount{
   
    public double calculate(double price){
   
		System.out.println("学生票:");
		return price*0.8;
	}
} 


//儿童优惠
public class ChildDiscount implements Discount{
   
    public double calculate(double price){
   
		System.out.println("儿童票:"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值