Vertical and Horizontal Decorating

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

装饰器模式是在不改变对象接口的情况下为对象添加功能的最佳方法之一。我经常使用可组合的装饰器,并且经常在特性列表需要可配置时,对如何正确设计它们感到困惑。我不确定我是否有正确的答案,但是这里提供一些思考的食物。

假设我有一个数字列表:

现在我想要创建一个只包含奇数、唯一、正数且排序过的数字的列表。第一种方法是垂直的(我刚刚编了这个名字):

第二种方法是水平(同样,是我编的名字):

看到区别了吗?第一种方法是通过可组合的修饰器PositiveOddsUniqueSorted“垂直”装饰ArrayNumbers,从而增加功能。

第二种方法引入了新的接口Diff,该接口通过PositiveOddsUniqueSorted的实例来实现迭代数字的核心功能。

对于 numbers 的用户来说,这两种方法是一样的。它们之间的区别仅在于设计上。哪一个更好,什么时候使用?似乎垂直装饰更容易实现,更适用于只暴露少量方法的较小对象。

根据我的经验,我总是倾向于从垂直装饰开始,因为它更容易实现,但当装饰器的数量开始增加时,最终会迁移到水平装饰。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-16 at 15:24

sixnines availability badge   GitHub stars