どのように管理し、これについてもパフォーマンスの観点から見ます。このようなことをすることができます。 擬似コード:
public class Host {
HostEventDispatcher dispatcher = new HostEventDispatcher();
MenuTypes {File, Tools, Options, Help}
ToolBarTypes {MainBar}
AddSubMenuToMainMenu(IMenu menu, MenuTypes hostMenu);
AddSubMenuToMainMenu(IToolbar toolbar, ToolBarTypes hostToolbar);
public void LoadPlugin(IPlugin plugin)
{
plugin.Dispatcher = dispatcher;
}
}
interface IMenu {/* control warpper implementation */}
interface IToolBar {/* control wrapper implementation */}
public HostEventDispatcher {
//raises events to subscribers (Host, plugins)
/***** event list ***/
}
public interface IPlugin
{
Dispatcher {get;set} //using this plugin can raise/recieve evets to/from Host.
}
非常に基本的な考え方。しかし、それは確かにリアルの実装でより複雑になり、後にははるかに複雑になる可能性があります。複雑さに注意を払うことはパフォーマンスに影響するため、「最大限の柔軟性」のパターンに従って簡単に逃すことができるためです。
よろしくお願いいたします。
をあなたが直面している問題の例を与えることができますか? – Tigran
多かれ少なかれデザイン。バトルシステムのプラグインが必要とするサービスは、メニューシステムとは異なりますが、メニューには複数の種類があります。また、戦闘システムでは、ウィンドウを作成するために何かにフックする必要があるかもしれません。何らかのスクリプティングシステムを使うのがよいでしょうか?複数のプラグインインターフェイスとホストが必要ですか? –
私の返事を見る – Tigran