首页 > 其他分享 >STRATEGY(策略)—对象行为型模式

STRATEGY(策略)—对象行为型模式

时间:2025-01-15 19:29:40浏览次数:3  
标签:客户程序 策略 对象 正文 模式 STRATEGY 换行 算法 一个

1. 意图
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独
立于使用它的客户而变化。
2. 别名
政策(P o l i c y)
3. 动机
有许多算法可对一个正文流进行分行。将这些算法硬编进使用它们的类中是不可取的,其原因如下:
• 需要换行功能的客户程序如果直接包含换行算法代码的话将会变得复杂,这使得客户程序庞大并且难以维护, 尤其当其需要支持多种换行算法时问题会更加严重。
• 不同的时候需要不同的算法,我们不想支持我们并不使用的换行算法。
• 当换行功能是客户程序的一个难以分割的成分时,增加新的换行算法或改变现有算法将十分困难。
我们可以定义一些类来封装不同的换行算法,从而避免这些问题。一个以这种方法封装
的算法称为一个策略( s t r a t e g y ),如下图所示。

假设一个C o m p o s i t i o n类负责维护和更新一个正文浏览程序中显示的正文换行。换行策略
不是C o m p o s i t i o n 类实现的,而是由抽象的C o m p o s i t o r类的子类各自独立地实现的。

C o m p o s i t o r各个子类实现不同的换行策略:
• S i m p l e C o m p o s i t o r实现一个简单的策略,它一次决定一个换行位置。
• Te X C o m p o s i t o r实现查找换行位置的T E X算法。这个策略尽量全局地优化换行,也就是,一次处理一段文字的换行。
• ArrayCompositor实现一个策略, 该策略使得每一行都含有一个固定数目的项。例如, 用于对一系列的图标进行分行。

C o m p o s i t i o n维护对C o m p o s i t o r对象的一个引用。一旦C o m p o s i t i o n重新格式化的正文,它就将这个职责转发给它的C o m p o s i t o r对象。C o m p o s i t i o n的客户指定应该使用哪一种C o m p o s i t o r的方式是直接将它想要的C o m p o s i t o r装入C o m p o s i t i o n中。

标签:客户程序,策略,对象,正文,模式,STRATEGY,换行,算法,一个
From: https://blog.csdn.net/workflower/article/details/145111774

相关文章

  • MEDIATOR(中介者)—对象行为型模式
    1.意图用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。2.动机面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对......
  • 商业模式画布BMC如何使用:提升企业战略规划力
    想象一下,你正站在一个充满无限可能的画布前,每一笔都可能勾勒出企业未来的蓝图。这不仅是一幅简单的画,而是一份战略地图——一份关于如何连接客户、创造价值、驱动收入的完整指南。这就是商业模式画布(BusinessModelCanvas,BMC),一个为企业设计和优化商业模式而生的神器。由亚历山......
  • 一文读懂Redis之哨兵(Sentinel)模式搭建
    目录一、环境规划二、Redis服务主从模式搭建步骤一、Master节点创建目录步骤二、Master节点下载Redis安装包步骤三、Master节点解压Redis安装包步骤四、Master节点进行make编译步骤五、Slave01节点、Slave02节点根据步骤一至步骤四安装Redis服务步骤六、Master节点修......
  • SpringBoot 插件化开发模式
    一、前言unsetunset1.1使用插件的好处1.1.1模块解耦实现服务模块之间解耦的方式有很多,但是插件来说,其解耦的程度似乎更高,而且更灵活,可定制化、个性化更好。举例来说,代码中可以使用设计模式来选择使用哪种方式发送短信给下单完成的客户,问题是各个短信服务商并不一定能保证......
  • Java面向对象---多态
    1多态的形式多态是继封装、继承之后,面向对象的第三大特性。多态是出现在继承或者实现关系中的。多态体现的格式:父类类型变量名=new子类/实现类构造器;变量名.方法名();多态的前提:有继承关系,子类对象是可以赋值给父类类型的变量。例如Animal是一个动物类型,而Cat......
  • Nginx+keepalived 双机热备(主从模式)
    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。关于负载均衡介绍,可以参考:linux负载均衡总结性说明(四层负载/七层负载)由于业务扩展,网站的访问量不断加大,负载越来越高。......
  • 模式识别课程设计报告-Iris鸢尾花样本集多种分类算法实现
     课程实验报告,从前人的总结分享中学习借鉴了很多,上传记录,或许能帮到有需要的人。任务一:(1)从sklean中导入iris数据集(2)从CSV文件中导入iris数据集任务二:(1)利用sklearn中的model_selection.train_split()函数将样本集划分为训练集和测试集(2)定义一个函数plot_points(),该函数的功能......
  • 必知必会!JavaScript 开发中的反模式与避坑指南
    一、开发“雷区”:JavaScript反模式危机四伏JavaScript作为软件开发领域的多面手,在Web前端、后端乃至移动端开发中均占据着举足轻重的地位。然而,在实际的开发过程中,众多反模式如同隐藏在暗处的陷阱,时刻威胁着开发的顺利进行。这些反模式的产生,源于JavaScript灵活的语法......
  • Sigrity System SI SerialLink模式进行USB3.1协议仿真分析操作指导-SuperSpeedPlus_Rx
    SigritySystemSISerialLink模式进行USB3.1协议仿真分析操作指导-SuperSpeedPlus_Rx_HostSigritySystemSISerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协......
  • 举例说明数组和对象的迭代方法分别有哪些?
    在前端开发中,数组和对象的迭代是常见的操作。对于数组,有多种迭代方法可供选择,而对于对象,由于其结构的特殊性,迭代方式相对有限但同样重要。以下分别举例说明数组和对象的迭代方法:数组的迭代方法forEach():该方法对数组的每个元素执行一次提供的函数。它不接受任何返回值,并且总是......