首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之策略模式(行为型)

设计模式之策略模式(行为型)

作者头像
SmileNicky
发布2019-01-17 16:19:25
2460
发布2019-01-17 16:19:25
举报
文章被收录于专栏:Nicky's blogNicky's blog

一、模式定义

策略模式:定义一系列算法,然后将每一个算法封装起来,并将它们可以互相替换。也就是将一系列算法封装到一系列策略类里面。策略模式是一种对象行为型模式。策略模式符合“开闭原则“

Strategy Pattern: Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

二、模式角色

  • Context :环境类
  • Strategy:抽象策略类
  • ConcreteStrategy:具体策略类

三、简单实例

不用策略模式的情况:

public class Context
{
    ……
    public void method(String type)  
    {
        ......
        if(type == "strategyA")
        {
            //算法A
        }
        else if(type == "strategyB")
        {
            //算法B
        }
        else if(type == "strategyC")
        {
            //算法C
        }
        ......
    }
    ……
} 

抽象策略类:

public abstract class AbstractStrategy
{
    public abstract void method();  
} 

具体策略类:

public class ConcreteStrategyA extends AbstractStrategy
{
    public void method()
    {
        //算法A
    }
} 

环境类:

public class Context
{
    private AbstractStrategy strategy;
    public void setStrategy(AbstractStrategy strategy)
    {
        this.strategy= strategy;
    }
    public void method()
    {
        strategy.method();
    }
} 

客户端调用:

Context context = new Context();
AbstractStrategy strategy;
strategy = new ConcreteStrategyA();
context.setStrategy(strategy);
context.method();

四、策略模式和状态模式对比

相同点:

  • 策略模式和状态模式都是属于行为型设计模式,也同样是对象行为型设计模式,非类行为型设计模式。
  • 策略模式和状态模式有点类似,都符合”闭合原则“
  • 两个设计模式都可以用于减少代码大量的if…else

不同点:

  • 具体使用策略模式还是状态模式,可以通过环境类的状态而定,有很多状态的话,就使用状态模式。
  • 使用策略模式时,环境类需要选择一个确定的策略类,也就是客户端调时需要关心具体状态,根据需要调用;而状态模式是不需要的,在状态模式里,环境类是要放在一个具体状态中的,也就是根据环境类的状态改变进行调用状态类的算法

对状态模式不是很熟悉,可以参考我以前写的一篇博客

https://cloud.tencent.com/developer/article/1384406

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、模式定义
  • 二、模式角色
  • 三、简单实例
  • 四、策略模式和状态模式对比
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档