策略设计模式

简介

策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

实现

策略设计模式由以下几个部分组成
  • 封装类:也叫上下文,对策略进行二次封装,目的是避免高层模块对策略的直接调用。
  • 抽象策略:通常情况下为一个接口,当各个实现类中存在着重复的逻辑时,则使用抽象类来封装这
    部分公共的代码,此时,策略模式看上去更像是模版方法模式。
  • 具体策略:具体策略角色通常由一组封装了算法的类来担任,这些类之间可以根据需要自由替换。

假设有这样一个需求

商店购物

  • 青铜会员打九五折
  • 白银会员打九折
  • 白金会员打八折

  1. 我们先写抽象策略
public interface Strategy {
    double getPrice(double standardPrice);
}
  1. 三种具体策略
/**
 * 青铜用户
 * @author guxiang
 * @date 2017-2-23 下午8:09:56
 */
public class BronzeMember implements Strategy {

    public double getPrice(double standardPrice) {
        System.out.println("九五折");
        return standardPrice*0.95;
    }

}
/**
 * 白银用户
 * @author guxiang
 * @date 2017-2-23 下午8:10:57
 */
public class SilverMember implements Strategy {

    public double getPrice(double standardPrice) {
        System.out.println("九折");
        return standardPrice*0.9;
    }

}
/**
 * 白金用户
 * @author guxiang
 * @date 2017-2-23 下午8:10:23
 */
public class PlatinoMember implements Strategy{

    public double getPrice(double standardPrice) {
        System.out.println("八折");
        return standardPrice*0.8;
    }

}
  1. 封装类(上下文类)
/**
 * context负责具体与策略类的交互
 * 在spring中的依赖注入功能,可以通过配置文件,动态注入策略对象
 * @author guxiang
 * @date 2017-2-23 下午8:53:57
 */
public class Context {
    private Strategy strategy;

    //构造注入
    public Context(Strategy strategy) {
        super();
        this.strategy = strategy;
    }
    //set方法注入
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public void getFinallyPrice( double standardPrice) {
        System.out.println("报价是"+strategy.getPrice(standardPrice));
    }
}

策略模式的本质其实就是 分离算法,选择实现

  • JAVASE中的GUI编程就中的布局管理器是最常用的策略模式,Flow布局,Border布局,Card布局
  • Spring框架中,Resource接口,实现的资源访问策略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值