设计模式之策略模式(行为型)(代码片段)

mzq123 mzq123     2023-02-17     733

关键词:

一、模式定义

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

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://blog.csdn.net/u014427391/article/details/85219470


设计模式之策略模式(行为型)(代码片段)

1、策略模式定义代理模式的定义:策略模式是一种行为型模式,定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。比如商场收银时如何促销&#... 查看详情

设计模式之策略模式(行为型)(代码片段)

1、策略模式定义策略模式的定义:策略模式是一种行为型模式,定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。比如商场收银时如何促销&#... 查看详情

javascript设计模式--行为型--设计模式之strategy策略模式(21)(代码片段)

         JAVASCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVASCRIPT语言来实现主体功能,所以不可能像C++,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVASCRIPT代码,代码只是实现了... 查看详情

设计模式之-策略模式(strategypattern)(代码片段)

...,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。 C++实... 查看详情

行为型设计模式-策略模式详解(代码片段)

基本介绍策略模式(StrategyPattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,是一种对象行为型模式。模式结构Context(环境角色):持有抽象策略角色的... 查看详情

javascript设计模式--行为型--设计模式之strategy策略模式(21)(代码片段)

         JAVASCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVASCRIPT语言来实现主体功能,所以不可能像C++,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVASCRIPT代码,代码只是实现了... 查看详情

设计模式行为型模式策略模式(代码片段)

概念策略模式(StrategyPattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式属于对象的行为模式。其用意是针对一组算法,将... 查看详情

设计模式-行为型模式讲解二(模板策略解释器)(代码片段)

一、行为型设计模式上篇,我们呢讲解了-行为型设计模式的责任链、命令、迭代器模式。文章地址:https://blog.csdn.net/qq_43692950/article/details/120404903这篇文章我们来讲解下行为型设计模式的模板方法、策略、解释器模式。... 查看详情

设计模式之策略模式(代码片段)

  今天我们要介绍的设计模式叫做策略模式。策略模式其实就是把不同的策略(方法)封装在不同的类中。在策略模式(StrategyPattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式(... 查看详情

行为型设计模式-策略模式详解(代码片段)

基本介绍策略模式(StrategyPattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,是一种对象行为型模式。模式结构Context(环境角色):持有抽象策略角色的... 查看详情

行为型模式之策略模式

概述在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽... 查看详情

设计模式行为型模式--策略模式jdk源码分析:comparator(代码片段)

设计模式行为型模式–策略模式(定义、结构、示例、分析)1.策略模式JDK源码分析:ComparatorComparator中的策略模式。在Arrays类中有一个sort()方法,如下:publicclassArrayspublicstatic<T>voidsort(T[]a,Comparator<?super 查看详情

19行为型模式之策略模式

概念  Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strateg... 查看详情

设计模式之行为型模式(代码片段)

...式比类行为模式具有更大的灵活性。行为型模式是GoF 设计模式中最为庞大的一类,它包含以下11种模式。模板方法(TemplateMethod)模式:定义一个操作中的算法骨架,将算法的一些步骤延迟到子类中,使得子类在可以不改变... 查看详情

行为型模式之状态模式(代码片段)

状态模式(StatePattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(ObjectsforStates),状态模式是一种对象行为型模式。主要解决:对象的行为依赖于它的状态(属性),并且... 查看详情

设计模式之策略模式(代码片段)

...例1.简要概述策略模式也叫作决策模式,属于行为型设计模式。策略模式定义了解决某一个问题的一个算法族,允许用户从该算法族中针对不同的场景选择一个算法解决该问题,同时可以方便的更换算法或者增加新的... 查看详情

设计模式行为型模式--策略模式(定义结构示例分析)(代码片段)

1.策略模式引入作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。2.策略模式定义3.结构... 查看详情

designpattern-策略模式行为型(代码片段)

欢迎关注微信公众号:FSA全栈行动👋一、策略模式介绍策略模式(StrategyPattern)定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换核心组成Context上下文:屏蔽高层模块对策略、算... 查看详情