策略模式

概念:
定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。
通俗点说就是定义一个抽象类或者接口 。让子类去做实现,不同的类具有不同的功能,但方法名称是一样的

在这里插入图片描述
@TOC
Sunny软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票打折方式,具体打折方案如下:

  (1) 学生凭学生证可享受票价8折优惠;
  (2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);
  (3) 影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。
  该系统在将来可能还要根据需要引入新的打折方式。

普通方式


//电影票类

class MovieTicket {
	private double price; //电影票价格
	private String type; //电影票类型
	
	public void setPrice(double price) {
		this.price = price;
	}
	
	public void setType(String type) {
		this.type = type;
	}
	
	public double getPrice() {
		return this.calculate();
	}
	
         //计算打折之后的票价
	public double calculate() {
                  //学生票折后票价计算
		if(this.type.equalsIgnoreCase("student")) {
			System.out.println("学生票:");
		    return this.price * 0.8;
		}
                  //儿童票折后票价计算
		else if(this.type.equalsIgnoreCase("children") && this.price >= 20 ) {
			System.out.println("儿童票:");
		    return this.price - 10;
		}
                  //VIP票折后票价计算
		else if(this.type.equalsIgnoreCase("vip")) {
			System.out.println("VIP票:");
		    System.out.println("增加积分!");
			return this.price * 0.5;
		}
		else {
			return this.price; //如果不满足任何打折要求,则返回原始票价
		}
	}
}
@[TOC](策略模式)
```java
// 在使用策略模式时,我们需要将算法从Context类中提取出来,
//首先应该创建一个抽象策略类,其典型代码如下所示:
 	abstract class AbstractStrategy {
    public abstract void algorithm(); //声明抽象算法
}
//然后再将封装每一种具体算法的类作为该抽象策略类的子类,如下代码所示:
class ConcreteStrategyA extends AbstractStrategy {
    //算法的具体实现
    public void algorithm() {
       //算法A
    }
}
//其他具体策略类与之类似,对于Context类而言,在它与抽象策略类之间建立一个关联关系,其典型代码如下所示:
class Context {
private AbstractStrategy strategy; //维持一个对抽象策略类的引用
 
    public void setStrategy(AbstractStrategy strategy) {
        this.strategy= strategy;
    }
 
    //调用策略类中的算法
    public void algorithm() {
        strategy.algorithm();
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值