详细讲解策略模式

策略模式

系统动态的在几种算法中选择一种来使用。

在这里插入图片描述
上图,Strategy是一个接口,ConcreteStrategyA,ConcreteStrategyB,ConcreteStrategyC都实现了Strategy接口,但是实现的策略是不同的。这符合了开闭原则(对修改关闭,对扩展开放),Context用来接收Strategy的策略实现类,Context和Strategy是聚合关系。
代码如下:

定义策略接口

package com.dl.pattern.strategy2;

/**
 * 先定义策略,面向接口,开闭原则
 */
public interface Strategy {


    double getPrice(double standaradPrice);
}

第一种策略算法

/**
 * 普通会员策略
 */
public class Vip0Strategy implements Strategy {

    @Override
    public double getPrice(double standaradPrice) {
        System.out.println("普通会员,原价"+standaradPrice);
        return standaradPrice;
    }
}

第二种策略算法

public class Vip1Strategy implements Strategy {
    @Override
    public double getPrice(double standaradPrice) {
        System.out.println("一级会员,打九折"+standaradPrice*0.9);
        return standaradPrice*0.9;
    }
}

第三种策略算法

public class Vip2Strategy implements Strategy {
    @Override
    public double getPrice(double standaradPrice) {
        System.out.println("二级会员,打八折"+standaradPrice*0.8);
        return standaradPrice*0.8;
    }
}

策略接受器

/**
 * 策略接收器,专门接收策略实现的算法
 * 负责和具体的策略类交互
 */
public class Context {
    private Strategy strategy;
    public Context(Strategy strategy){
        this.strategy=strategy;
    }
    public double getReultPrice(double price){
        return this.strategy.getPrice(price);
    }
}

测试类

public class Client {
    public static void main(String[] args) {
        System.out.println("=========使用策略===========");
        Context context=new Context(new Vip1Strategy());
        double b = context.getReultPrice(1000);
        System.out.println(b);
    }
}

扫码进入大牛技术群。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值