设计模式——策略模式

什么是策略模式

策略模式为所有的算法定义一个抽象接口,继承这个接口,对所有的算法加以封装和实现,而算法的选择由客户端决定,举个例子,排序算法有多种,那么定义一个含有sort的抽象算法接口,继承这个接口,实现其中的sort方法,客户端使用时,自己决定使用归并排序或是快速排序等

 

策略模式的角色

../_images/Strategy.jpg

Strategy(抽象策略类):只负责定义策略方法。

ConcreteStrategy(具体策略类):负责实现策略方法

Context(环境类):客户端通过这个类设置策略,调用策略

 

策略模式的优点

我的理解是策略模式方便进行功能扩展,使一个类不会过于臃肿,例如排序算法,虽然我们可以把所有的排序算法封装到一个类中,但每次添加一个排序算法,就要修改这个类,久而久之,这个类会越来越臃肿,更改删除一个排序算法可能要寻找很久,而策略模式不存在这种问题,只需要实现接口就可以添加一个排序算法,更改和删除排序算法只需要找到对应的实现类即可。

 

实例

大家都知道玩游戏只有充钱才能变强,那么我们就拿这个作为例子,超级VIP购买英雄级武器五折,VIP购买八折,普通玩家原价购买

strategy:

package strategy;

/**
 *
 * @author lzy
 */
public interface strategy {
    double getPrice(double price);
}

 

VIP策略:

package strategy;

/**
 *
 * @author lzy
 */
public class VIP implements strategy{
    
    @Override
    public double getPrice(double price){
        return 0.8*price;
    }
    
}

 

超级VIP策略:

package strategy;

/**
 *
 * @author lzy
 */
public class superVIP implements strategy{
    
    @Override
    public double getPrice(double price){
        return 0.5*price;
    }
    
}

 

普通玩家策略:

package strategy;

/**
 *
 * @author lzy
 */
public class general implements strategy{
    
    @Override
    public double getPrice(double price){
        return price;
    }
}

 

context:

package strategy;

/**
 *
 * @author lzy
 */
public class context {
    private strategy stra;
    
    public void setStrategy(strategy stra){
        this.stra=stra;
    }
    
    public double algorithm(double price){
        return stra.getPrice(price);
    }
}

 

main:

package strategy;

/**
 *
 * @author lzy
 */
public class main {  
    public static void main(String[] args){
        
        double price=88800;
        context cont=new context();
        
        System.out.println("VIP购买价格:");       
        cont.setStrategy(new VIP());
        System.out.println(cont.algorithm(price));
 
        System.out.println("超级VIP购买价格:");       
        cont.setStrategy(new superVIP());
        System.out.println(cont.algorithm(price));
        
        System.out.println("普通玩家购买价格:");       
        cont.setStrategy(new general());
        System.out.println(cont.algorithm(price));
        
        
        
        
     
    }
}

 

运行结果:

 

策略模式没有像备忘录模式一样给我惊艳的感觉,只是一种模块化的编程思想,使用策略模式可以让代码结构更加清晰,可以避免类过于臃肿

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值