【问题标题】:What design pattern fits this case better哪种设计模式更适合这种情况
【发布时间】:2012-10-29 23:55:55
【问题描述】:

我要从 3D 模型生成 2D 图像,并对图像进行一些计算并从中产生一些结果。结果将附加在该 2D 图像的顶部作为其标题。

  • 可以根据参数(DiagramType)从特定场景生成三种不同类型的图像。
  • 还可以通过两种不同的方式创建图像:光线追踪或通过 GPU。因此,负责生成图像的方法“CreateImage”可能有两个不同的签名(不同数量的输入)。
  • 这些不同类型的图表或渲染方法之间有一些共同的方法。

哪种设计模式更适合这种情况?

对于这三种图表类型或接口,使用抽象类(因为有一些可以继承的常用方法)会更好吗?

我最关心的是这个“CreateImage”方法,它可以对所使用的方法有不同的签名,这样每个图表类型都会有一个“CreateImage”方法,而不管图表类型和渲染方法如何。(我不确定这个完全有可能)。

【问题讨论】:

  • 好奇 - 为什么您确定需要设计模式来解决您的问题?
  • 我认为因为这三种图表类型有一个创建图像的方法,但每个都有自己的实现(除了这个问题,'CreateImage'方法还取决于另一个因素:渲染类型)。还有一些共同的操作,它们之间是共享的。
  • 设计模式并不是灵丹妙药,它能让您立即深入了解优秀的设计。当我看到关于堆栈溢出的问题说“我应该使用什么设计模式”时,我总是畏缩不前。我给你的最好建议是不要试图将设计模式硬塞进你的设计中。模式本身并不是解决方案。
  • 那么我最终会实现太多的 switch case 或 if 语句来选择要创建的对象或使用的方法。在不同的类中也会有重复的代码。
  • 啊,所以您正在寻找一种设计模式来弥补糟糕的 OO 设计。也许最好的办法是尽可能地编写代码 - 使用“too many switch case or else if statements”,然后将其发布到Code Review。这样你会学到更多:)

标签: c# design-patterns interface abstract


【解决方案1】:

“三个不同的 xxx 对两个不同的 yyy”,这对我来说听起来就像是桥模式。

换句话说,你有一个 xxx 的层次结构,一个 yyy 的层次结构,并且 xxx 接受注入的 yyy。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多