【问题标题】:What is the name of described pattern?描述的模式的名称是什么?
【发布时间】:2014-09-17 23:35:05
【问题描述】:

从高层的角度来看,该模式可以在不创建类层次结构的情况下获得多态行为。

它由三部分组成:

  1. 数据容器类,有特定的字段需要区分(例如:用户类有country字段,或多租户saas项目中任何有tenant字段的类)。

  2. 上下文类:这些类包含的数据和逻辑因不同类型的数据容器而异(例如,不同租户的不同逻辑)。有一个顶级 Context 类,所有不同的 props 都设置为默认值,以及多个覆盖默认值的派生类。

  3. 数据消费者/处理器:这些是业务逻辑持有者。它们接受数据容器和上下文作为参数。

第三类公民可能有这样的方法:

Price getPrice(Price price, Context context) {
   double VAT = context.getVAT()
   return new Price(
           transform(price.amount + price.amount * VAT, price.currency, context.currency),
           context.currency
          )
}
...
//and here's the call:
Context ctx = getContext(principal.getCountry())
Price priceInUserCurrency = priceCalculator(priceInUsd, ctx); 

这是一个简化的 UML 图:

基本用法:当我们需要为同一类的小对象引入不同的特定行为时, 我们向Context 添加了一个具有合理默认值的新方法,并在具体上下文中实现实际逻辑。然后无论我们需要在哪里注入这段逻辑,我们只需调用对应的上下文方法。

【问题讨论】:

  • 基于地区的货币/价格计算器难道不是一种策略模式吗?

标签: oop design-patterns


【解决方案1】:

您似乎在描述Strategy Design Pattern

它的好处是您可以为 PersonProcessor 和 PaymentProcessor 执行process()。就像下面这个例子。

每个对象都知道如何处理自己的功能案例。

【讨论】:

    【解决方案2】:

    对我的描述

    无需创建类层次结构即可获得多态行为

    更接近State设计模式的概念。

    因为它允许对象在其内部状态发生变化时改变其行为。该对象将出现更改其类。此外,即使状态发生变化,您也可以保留先前状态的属性。

    关于你can read more here的继承部分。

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2021-12-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2022-11-30
      • 1970-01-01
      • 2015-06-08
      相关资源
      最近更新 更多