.net 封装UI控件之间的通用功能的设计模式

.net 封装UI控件之间的通用功能的设计模式,.net,design-patterns,.net,Design Patterns,我正在围绕一个模式集思广益,以用于以下场景 我有一些第三方控件,我想添加通用功能。通过处理多个事件和在事件触发时执行某些操作,以及添加一些私有变量来保存事件之间的一些状态信息,可以添加该功能。我希望重用代码和功能,因此这是我通常要做的 为该功能创建一个类,并在构造函数中传入我要添加该功能的控件实例 然后我可以将事件处理程序添加到类实例中的控件中 有人能想出其他模式来创建这种可重用功能吗?您可能想看看: facade模式将允许您在当前类下封装控件的行为。decorator模式将允许您创建可堆

我正在围绕一个模式集思广益,以用于以下场景

我有一些第三方控件,我想添加通用功能。通过处理多个事件和在事件触发时执行某些操作,以及添加一些私有变量来保存事件之间的一些状态信息,可以添加该功能。我希望重用代码和功能,因此这是我通常要做的

为该功能创建一个类,并在构造函数中传入我要添加该功能的控件实例

然后我可以将事件处理程序添加到类实例中的控件中


有人能想出其他模式来创建这种可重用功能吗?

您可能想看看:


  • facade模式将允许您在当前类下封装控件的行为。decorator模式将允许您创建可堆叠的控件。观察者模式将允许您管理事件。

    我觉得观察者模式应该会有所帮助。您可以这样使用它:

    实用类接受控件(如您所述):使其成为观察者

    将各种实用程序类(以及相应的控件)注册到它感兴趣的各种事件中:可观察的

    现在,当一个特定事件发生时,它会更新各种观察者,您可以将基本的事件处理委托给它正在包装的控件,还可以根据控件和事件进行自定义处理。

    最适用的“设计模式”是观察者。您想要开发的可重用功能可以作为简单的控制观察者来实现,这些观察者订阅一些控制事件子集。幸运的是,Windows窗体控件实现了许多事件,这使得通过通常的子类,从类外添加功能几乎与从类内添加功能一样容易

    例如,可以通过实现订阅DragOver和DragDrop(可能还有DragLeave)并基于DragDropEvent数据执行适当操作的观察者来添加拖放支持


    这是一个很好的考虑技术,因为它允许您一次性开发这样的功能并将其添加到许多控件中。

    外观模式不会很好地封装控件内的功能,因为外观模式不应该在控件的方法调用之间保持任何状态(按照我的要求)。根据我的描述,在这个场景中使用观测者模式毫无意义。装修师,好吧,也许这件合适;)。。。。如果我错了,请告诉我,因为我想更好地理解你建议如何用这些模式实现这一点。事实上,我认为Steven在这方面是非常正确的。您可以使用facade为UI控件(想想:UserControl)创建统一接口。decorator的概念类似于通过合成和添加特定功能使用第三方。当第三方控件上发生事件时,Observer将用于让顶级控件做出响应。我现在知道Observer适合它的位置。不过,从技术上讲,我的解决方案是observer,仅.NET中的Forms事件模型就可以被视为observer模式。将另一个观察者模式推进到mis中是没有意义的,因为我的解决方案已经非常简单,并且已经使用了观察者模型。当你深入到我已经在做的事情的细节时,所有的都是幕后观察者。没有必要进一步扩展它,创建观察者接口并遵循严格的模式指南。基本上,我正在创建一个类,在该类中,我在构造函数中传入控件,然后委托事件来处理控件事件。NET中的事件模型已经被认为是一种观察者模式。我同意用现有的控制API实现这一模式非常简单。我只是想说你的方法很好。谢谢你对观察者模式的描述。