首页 > 其他分享 >设计模式系列一策略模式

设计模式系列一策略模式

时间:2023-03-10 16:37:26浏览次数:34  
标签:父类 系列 策略 子类 模式 算法 抽象 设计模式

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

 

Context(环境类):环境类是使用算法的角色,它在解决问题(即某个实现方法)时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例,用于定义所采用的策略

 (环境类 就是调用 通过父类调用具体子类的中间桥梁)

Strategy(抽象策略类):它为所支持的算法声明了抽象方法,是所有策略类的父类,它可以是抽象类、具体类、接口。

                                          环境类通过抽象策略类中声明的方法在运行时调用具体策略类中实现的算法。

(抽象策略类 就是封装的 抽象类或者接口,再者可以定义为具体类,让其他子类继承或实现的父类)

ConcreteStrategy(具体策略类):它实现了在抽象策略类中声明的算法,在运行时,具体策略类将覆盖在环境类中定义的抽象策略类对象,使用一种具体的算法实现某个业务处理。

  (具体策略类 就是实现父类或者接口的子类)

二.HeadFirst设计模式书中策略(鸭类)的设计图如下:

 

 

三.优缺点

优点:

1.符合开闭原则,可在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为

2.将算法的定义和使用分离开来,符合单一职责原则,可最大程度地复用算法

缺点: 系统可能或产生很多具体策略类

 四.适用场景

  策略模式用于算法的自由切换和扩展;

  策略模式对应于解决某一问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便地更换算法或增加新的算法。

  只要涉及到算法的封装、复用和切换都可以考虑策略模式。

【策略模式,其实就是父类和子类共性部分用继承差异部分用接口。并且接口的调用放在父类中,我们称之为委托。然后子类继承抽象父类,实例化接口。最后在子类实现动态绑定】

 

 五.日常中使用策略模式的场景

   支付方式的选择、交通工具的选择,签名方式的选择。一句总结策略模式就是把选择权交给用户

标签:父类,系列,策略,子类,模式,算法,抽象,设计模式
From: https://www.cnblogs.com/mengzhixingping/p/17203813.html

相关文章

  • Ubuntu 20.04 双网卡绑定bond 主备模式
     一、active-backup-主备模式一个网卡处于活动状态,另一个处于备份状态,所有流量都在主链路上处理,当活动网卡down掉时,启用备份网卡。 1、实验环境VMware虚拟机,系统Ubu......
  • Rxjs编程系列-基本概念
    Rxjs就是利用javascript实现了响应式编程的概念,利用监听流的模式处理异步操作。1.函数响应式编程函数式编程声明式纯函数数据不可变性响应式编程通过可监听流......
  • Rxjs编程系列-操作符
    定义:一个操作符是返回一个Observable对象的函数,不过,有的操作符是根据其他Observable对象产生返回的Observable对象,有的操作符则是利用其他类型输入产生返回的Observable......
  • 设计模式-javascript实现【外观模式】
    定义:外观模式又叫门面模式,外观模式为一个系统中的子系统提供一个统一的高层接口,从而方便使用子系统。1.用类实现外观模式classCpu{install(){console.log('......
  • read超时,write,accept,connect超时函数,设置io阻塞模式
    1.设置I/O为阻塞模式  2.设置I/O为阻塞模式  超时函数:  3.读超时4.写超时  5.accept_timeout超时函数   主调函数 ......
  • Git使用系列03-->Git仓库创建
     前言只要不放下努力和追求,小草也有点缀春天的价值。学习技术真的不能断篇~一、git工作原理&流程1.1git工作流程图示如下:Workspace:工作区Index/Stage:暂存区Repositor......
  • SOLIDWORKS免费培训 SW大型装配体模式课程
    在SOLIDWORKS的使用过程中,大家经常会遇到大型装配体的处理问题,微辰三维的培训课程中也包含了一些大型装配体的技术培训,下面整理一些常见问题,供参考:大型装配体模式1.当我们打......
  • 使用Python实现单例模式
    在使用类名()创建对象时,python解释器首先会调用__new__()方法为对象分配内存,然后再调用__init__()方法进行初始化: 其中__new__()是object基类提供的内置静态方......
  • matlab2c使用c++实现matlab函数系列教程-sort函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......
  • matlab2c使用c++实现matlab函数系列教程-trace函数
    ​​​​全栈工程师开发手册(作者:栾鹏)​​matlab2c动态链接库下载​​​matlab库函数大全matlab2c基础教程matlab2c开发全解教程matlab2c调用方法:1、下载动态链接库2、......