Design patterns 动态响应事件

Design patterns 动态响应事件,design-patterns,Design Patterns,我有三个部分。一个windows窗体控件自定义,一个主类和一个插件类 interface IPlugin { event EventHandler PluginUpdateEvent; } 该插件生成一个更新事件,在该事件中应该向控件添加一些内容。这可能是一个字符串,一个带有url的字符串,或者另一个控件,但将来可能是其他的 设计这样的东西最好的方法是什么 编辑: 我应该更清楚一点。我想解决的问题是如何在特定项目上做出不同的反应 例如:插件可以选择只添加一些文本。它分派一个事件,主类应

我有三个部分。一个windows窗体控件自定义,一个主类和一个插件类

interface IPlugin
{
    event EventHandler PluginUpdateEvent;
}
该插件生成一个更新事件,在该事件中应该向控件添加一些内容。这可能是一个字符串,一个带有url的字符串,或者另一个控件,但将来可能是其他的

设计这样的东西最好的方法是什么

编辑:

我应该更清楚一点。我想解决的问题是如何在特定项目上做出不同的反应

例如:插件可以选择只添加一些文本。它分派一个事件,主类应该调用相应的方法。但是另一个插件可能会选择添加自定义控件,因此主类需要调用不同的方法

我如何设计主类在特定事件上的行为不同的部分


顺便说一句,不要把plugin这个词看得太文学化。现在,它们只是项目中的类。

听起来很简单。我建议为你的插件类使用一个接口

interface IPlugin
{
    event EventHandler PluginUpdateEvent;
}
无论是表单类还是主类,都会包含一个集合或一个插件数组,不管需求是什么,并根据需要发现它们——通过反射、构造函数注入、配置文件,无论什么都是最好的

加载插件后,您将确保表单订阅了该插件的PluginUpdateEvent,并添加事件处理程序来处理事件,并向表单添加任何必要的内容。

您可以使用


另外,请查看使用模型视图控件设计模式,并在视图中传递希望它们运行的调用函数。见此:

-- the code is in LUA
-- **** I create an answerBox, and when user tap this answerBox I want to print->"test"

local answerBox = require "view.answerBox"
local test = answerBox:new()
test.init("text for your answerBox", "1", function () print "answerBox was tapped by the user" end)
在answerBox类中,我得到函数,并在点击对象时调用它:

-- constructor
function new( self, message, id, callBackFunction, obj )
    function callBackFunction( event )            
        callBackFunction(event)
    end
    obj.answerBox:addEventListener( "tap", callBackFunction )
end
使用此结构时要小心。在此结构中,answerBox类在视图中,CallBackFunction在控制器中。您甚至可以使用模型中的一些逻辑来代替函数打印测试结束

希望这有帮助