【问题标题】:What design pattern should I use to support behavior that varies "parallel" to a class hierarchy?我应该使用什么设计模式来支持与类层次结构“平行”变化的行为?
【发布时间】:2015-12-04 15:00:48
【问题描述】:

我在我的 4X 游戏中声明了一个ISpaceObject 接口。

我还声明了实现该接口的抽象 VehicleStellarObject 类。

这些抽象类中的每一个都有继承自它的子类(例如,ShipBaseFighter 对应于VehiclPlanetStarStorm 对应于StellarObject)。

我希望能够为每种类型的对象显示图标和肖像图片。

我已经在各个类中实现了图形代码(例如 Icon 属性),但它是特定于 WinForms 的,我想为我的应用编写一个 WPF 端口。

我不想在我的每个班级都有WinFormsIconWpfIcon 等属性;这有点傻,而且我敢肯定一开始就把 WinForms 代码放在那里是个错误。

如何在不使用如下代码的情况下执行类似这样的并行行为:

if (o is Ship)
    // get ship graphic
else if (o is Base)
    // get base graphic
else if (o is Fighter)
    // get fighter graphic

等等?

【问题讨论】:

  • ISpaceObject 接口的 Icon 属性是不是一部分?
  • 你能提供一些你的类型的代码吗?
  • 对不起,我没有得到你想要的。您不想将代码移植到 wpf,而是想在 Windows 窗体中保持原样?
  • 我认为这类问题的常见模式是 Traits stackoverflow.com/questions/10729230
  • @ekolis 您能否展示一下到目前为止您在课堂上是如何管理 WinFormsIcon 的?这将有助于了解当前情况并为您提供解决方案。

标签: c# .net wpf oop design-patterns


【解决方案1】:

您可以改为将属性更改为 string IconName

此名称可以指向资源程序集中的嵌入资源。

或者您可以使用System.Windows.Interop.ImagingBitmap(我假设这是您的WinForms 项目中的内容)转换为ImageSource。

【讨论】:

  • 嗯,System.Windows.Interop.Imaging 听起来像是最简单的解决方案,虽然感觉有点不对劲!
  • 我无法使用 IconName,因为其中一些图像是动态绘制的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2011-04-02
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多