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

songjilong songjilong     2022-12-13     211

关键词:

基本介绍

策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,是一种对象行为型模式。

模式结构

技术图片

Context(环境角色):持有抽象策略角色的引用

Strategy(抽象策略角色):给出所有具体策略类所需的接口

ConcreteStrategy(具体策略角色):包装了相关的算法或行为

举例说明

鸭子分为野生和家养,野生鸭子会飞,而家养鸭子不会飞。使用策略模式来是实现,可以将「飞」定义为一个抽象策略,具体策略就是「会飞」、「不会飞」

1、抽象策略角色

public interface FlyBehavior 
    void fly();

2、具体策略角色

public class CanFlyBehavior implements FlyBehavior 
    @Override
    public void fly() 
        System.out.println("可以飞");
    


public class NotFlyBehavior implements FlyBehavior 
    @Override
    public void fly() 
        System.out.println("不会飞");
    

3、环境角色

//鸭子类
public abstract class Duck 

    private FlyBehavior flyBehavior;

    public Duck(FlyBehavior flyBehavior) 
        this.flyBehavior = flyBehavior;
    

    public void fly()
        flyBehavior.fly();
    

    public abstract void description();


//野生鸭子
public class WildDuck extends Duck 

    public WildDuck(FlyBehavior flyBehavior) 
        super(flyBehavior);
    

    @Override
    public void description() 
        System.out.println("我是野生鸭子");
    


//家养鸭子
public class DomesticDuck extends Duck 

    public DomesticDuck(FlyBehavior flyBehavior) 
        super(flyBehavior);
    

    @Override
    public void description() 
        System.out.println("我是家养鸭子");
    

4、测试类

public class Client 
    @Test
    public void test()
        Duck duck1 = new WildDuck(new CanFlyBehavior());
        duck1.description();
        duck1.fly();
        Duck duck2 = new DomesticDuck(new NotFlyBehavior());
        duck2.description();
        duck2.fly();
    

5、运行结果

我是野生鸭子
可以飞
我是家养鸭子
不能飞

模式分析

优点:

  • 易于扩展。策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。
  • 策略模式提供了管理相关的算法族的办法。
  • 使用聚合或组合替换了继承,降低耦合。
  • 使用策略模式可以避免使用多重条件转移语句。

缺点:

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 可能会产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。

适用场景:

  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
  • 一个系统需要动态地在几种算法中选择一种。
  • 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
  • 不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。

参考:https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/strategy.html

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

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

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

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

设计模式10-策略模式与责任链模式详解(代码片段)

1.10.策略模式与责任链模式详解1.10.1.策略模式详解时长:1h15min10.1.1.策略模式的定义定义:  策略模式【Strategy Pattern】,又叫政策模式【PolicyPattern】,它是将定义的算法家族,分别封装起来,让它们之间可以相互替换,从而... 查看详情

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

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

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

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

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

@TOC策略模式应用场景1、针对同一类型问题,有多种处理方式,每一种都能独立解决问题。2、算法需要自由切换的场景。3、需要屏蔽算法规则的场景。优缺点优点:1.可以在运行时切换对象内的算法。2.避免使用多重条件转移语... 查看详情

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

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

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

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

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

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

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

...;实现了抽象策略定义的接口,提供具体的算法实现或行为。环境(Context)类:持有一个策略类的应用,最终给客户端调用。案例针对不同的节日退出不同的促销活动。publicinterfaceStrategypublicvoidshow();/***具体策... 查看详情

23种设计模式---策略设计模式(代码片段)

策略设计模式---透彻讲解一.什么是策略设计模式设计模式有三种:创建型,行为型,结构型.策略设计模式属于行为型.为什么属于行为型呢?来看看下面解释:1.1什么是策略呢?什么是策略呢?举个例子:出行方式:可以骑自行车,摩托车,开... 查看详情

从零开始学习java设计模式|行为型模式篇:策略模式(代码片段)

在本讲,我们来学习一下行为型模式里面的第二个设计模式,即策略模式。概述先看下面的图片,我们去旅游选择出行方式能有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿... 查看详情

从零开始学习java设计模式|行为型模式篇:策略模式(代码片段)

在本讲,我们来学习一下行为型模式里面的第二个设计模式,即策略模式。概述先看下面的图片,我们去旅游选择出行方式能有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿... 查看详情

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

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

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

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

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

    俗话说“条条大路通罗马”。在现实中,很多时候也有多种途径可以到达同一个目的地,比如,我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。在程序设计中,我们也常常遇到类似... 查看详情

十二种常见设计模式代码详解

零:设计模式分类设计模式有创建型模式、结构型模式与行为型模式创建型:单例模式、工厂模式(简单工厂,工厂方法,抽象工厂)结构型:适配器模式、门面模式、装饰器模式、注册树模式、代理... 查看详情

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

一、什么是行为型模式?行为型模式就是描述类和对象之间的通信和职责的。简而言之,就是类和对象扮演什么角色,还有怎么扮演这个角色的问题。二、行为型模式的种类大体上分为三个大类:常见模式、已知模式、深度模式... 查看详情