【问题标题】:Which design pattern should I use to give different effects to an object dynamically?我应该使用哪种设计模式来动态地为对象提供不同的效果?
【发布时间】:2014-07-23 18:04:49
【问题描述】:

我正在尝试为我的游戏项目制作一个可重复使用的工具。如您所知,每款游戏的文字效果看起来都更好。所以这就是我想做的。动态创建文字效果。

情况;

  • 在我的项目中,每个文本都是一个对象
  • 我想为这个文本对象添加一些效果可能不止一个

把一切都弄清楚;如果我将 wave 效果shine 效果 添加在一起,我希望我的 Text 对象同时挥动和闪耀

为了顺利进行,哪种设计模式有益?如果你是我,你会如何解决这个问题?

注意事项:

  • 我们谈论的是 C# 语言。
  • 添加效果是更改此文本对象的位置、对齐方式、纹理属性、阴影或斜角。
  • 我们可以将此 textObject 视为图像,并对其应用一些效果(过滤器)。

【问题讨论】:

  • 我们在说什么语言?您将什么定义为“添加效果”?这些效果是如何实现的?许多这些问题的答案将缩小您的设计模式。即便如此,这仍然是一个非常广泛的问题,并且可能会在没有更多细节的情况下就此结束。
  • @aruisdante 我们在谈论 C# 语言,添加效果是更改此文本对象的位置、对齐、纹理属性、阴影或斜角。我们可以认为这个 textObject 就像一个图像,并且我们正在对其应用一些效果(过滤器)。我知道这是一个广泛的问题,但我认为在开始设计之前提出建议或简单的类图会非常有益。装饰图案看起来不错,你觉得呢?

标签: c# oop design-patterns dynamic decorator


【解决方案1】:

这几乎是显而易见的。当然是Decorator 模式。

如您所见,装饰器本身继承自一个组件,因此您可以装饰另一个装饰器。这就是它在实践中通常的样子

new ShinyDecorator(new WaveDecorator(new TextComponent()));

您当然可以设计自己的用法,因为模式只是提示要做什么,而不是如何去做。您不必遵守图表。

【讨论】:

    【解决方案2】:

    我认为您想研究Decorator 模式。这将允许您混合和匹配不同类型的效果。

    装饰器模式可用于静态扩展(装饰)某个对象的功能,或者在某些情况下在运行时独立于同一类的其他实例,前提是在设计时完成了一些基础工作。这是通过设计一个包装原始类的新装饰器类来实现的。

    在您的示例中,波浪效果和闪耀效果将是两个不同的装饰器类,它们都扩展了 Text。您可以通过在两个装饰器中包装一个 Text 对象来获得挥动和闪亮的效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多