当前位置: 首页 > 面试题库 >

Collections.sort使用什么设计模式?

长孙高远
2023-03-14
问题内容

当按以下方式将比较器应用于列表时,此处使用的设计模式是什么?使用的技术是什么?

Collections.sort(myCollection, new Comparator<MyItem>() {

    @Override
    public int compare(MyItem item1, MyItem item2) {
        return item1.getId().compareTo(item2.getId());
    }

});

问题答案:

TL; DR

Collections.sort是简单多态替换的示例,无论您使用 功能编程 还是 面向对象编程 进行此替换。术语 策略模式 不能与
多态性函数编程 互换。

仍然可以说我们正在将排序传递Strategy给该sort方法,但是如果没有Context,则它不是“ 策略模式”的 同义词。

当按以下方式将比较器应用于列表时,此处使用的设计模式是什么?使用的技术是什么?

由于此问题已被标记为 OOP ,因此本来就没有使用 OOP 设计模式 。这是行动中常见的古老 多态性 。一些程序员可能将其称为“
策略模式”, 但我不同意。该 战略 格局主张 构成Inheritiance 在您使用一个 具有-A 的关系,而不是 is-a的
关系。

一些程序员可能会进一步辩称,我们正在StrategyCollections.sort方法进行排序,因此这是 策略模式 ;
但是,需要承认的是这Strategy是“ 战略模式 ”的组成部分之一。所述的另一重要组分 策略 图案是其Context即建立 HAS-A
与关系 策略 。该组件是 策略模式 背后动机的核心, 策略模式 是优先考虑 组成而 不是 继承
。您不能从整体中分离出一部分,而仍将分离的部分称为整体。你不能Context走出 策略模式 并仍称为其余的 策略模式

Collections.sort是一种static方法,允许您 多态 替换Comparator要在运行时使用的实现。

配套材料

让我们来看看定义 策略模式
从GoF的:

将算法封装在对象中是策略(315)模式的目的。模式的主要参与者是Strategy对象(封装了不同的算法) 和它们在其中运行的上下文
。合成者是策略;它们封装了不同的格式化算法。 合成是合成策略的背景

....

对象组合 提供了一种可能更可行,更灵活的扩展机制。

现在应该很清楚, 多态策略模式 之间存在细微的差异。该 策略 围绕图案会谈 上下文 使用 组合物 作为突出显示 粗体
上方。本Collections类不建立一个 组成 与关系 比较
。此外,类图的 策略模式
示出了组件调用的 上下文 ,其构成所述 策略 接口。

这个问题被标记为 OOP,
但是如果我们想谈谈Collections.sort功能编程范式代表什么模式,我会说它代表功能编程。(如果我必须将传递函数的方法等同于OOP模式,我会说它(而非完全)更像是
命令模式, 而不是 策略模式

相关内容
:函数式编程是否可以代替GoF设计模式?



 类似资料:
  • 请参见以下Dao设计模式的组件: 数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分离。以下是数据访问对象模式的参与者。 数据访问对象接口——该接口定义了对模型对象执行的标准操作。 数据访问对象具体类-这个类实现上述接口。这个类负责从数据源获取数据,数据源可以是数据库/xml或任何其他存储机制。 模型对象或值对象——这个对象是简单的POJO,包含get/set方法,用于存储

  • 问题内容: 我正在使用JDK-8(x64)。对于(原始),我在Java文档中发现了以下内容: 排序算法是Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch编写的Dual-Pivot Quicksort 。 对于(对象),我找到了“ Timsort”: 此实现是一个稳定的,自适应的,迭代的 mergesort 。此实现 将指定的列表转储到数组中,对数组进行排

  • 我使用的是JDK-8(x64)。对于<code>数组。sort</code>(原语)我在Java文档中找到了以下内容: 排序算法是弗拉基米尔·雅罗斯拉夫斯基、乔恩·本特利和约书亚·布洛赫的双轴快速排序。' 对于<code>集合。sort(对象)我找到了这个“Timsort”: 这个实现是一个稳定的、自适应的、迭代的合并…这个实现将指定的列表转储到一个数组中,对数组进行排序,并迭代列表,从数组中的相

  • 问题内容: 请参阅以下Dao设计模式的组件: 数据访问对象模式或DAO模式用于将底层数据访问API或操作与高层业务服务分开。以下是数据访问对象模式的参与者。 数据访问对象接口-此接口定义要在模型对象上执行的标准操作。 数据访问对象具体类-此类实现上述接口。此类负责从可以是数据库/ xml或任何其他存储机制的数据源获取数据。 模型对象或值对象-此对象是简单的POJO,其中包含用于存储使用DAO类检索

  • 本文向大家介绍请问设计模式是什么?相关面试题,主要包含被问及请问设计模式是什么?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使

  • 1、什么是设计模式? 设计模式是解决软件开发某些特定问题而提出的一些解决方案,也可以理解为解决问题的一些固定思路。 通过设计模式可以帮助我们增强代码的可复用性、可扩展性、灵活性。 我们使用设计模式的最终目的是实现代码的高内聚、低耦合。 2、设计模式的七大原则 单一职责原则 接口隔离原则 依赖倒转原则 里式替换原则 开闭原则 迪米特法则 合成复用原则 3、你是否在你的代码里面使用过任何设计模式? (