2009-04-26 6 views
1

たとえば、スクリプトオブジェクト(文字列、配列など)またはスクリプトエンジン(eval()、readFile()など)間の互換性レイヤー。抽象化(互換)レイヤーを作成する際に、ファンクタ、インターフェイス、または抽象メソッドを使用する必要がありますか?

+0

Dの代理人は同じ役割を果たすので、それは価値があるため、ファンクタは無意味です。 – FeepingCreature

答えて

3

これ以上のコンテキストがなければ、私はインターフェイスも言わなければならないでしょう。関数またはデリゲートを単一のメソッドでインターフェイスとして表現することができ、抽象クラスは単に潜在的に既に実装されているいくつかのメソッドとのインターフェイスであると考えてください。

つまり、実際に達成しようとしていることに依存しています。インターフェースは、共通のインターフェースを持つオブジェクトがたくさんありますが、実装が異なる可能性があります。たとえば、プラグイン用の非常にシンプルなコールバックシステムを設計している場合(つまり、プラグインをホストアプリケーションの特定のイベントにフックさせる場合)、代理人はおそらくあなたのニーズに合わせてより簡単で十分です。

また、インタフェースを使用する場合は、ホストがインスタンスをインスタンス化するための方法が必要になることがあります。これを行う最も簡単な方法は、一意の名前でホストに代理人を登録することです。

抽象クラスは、インターフェイスを使用していくつかのデフォルト実装を提供する場合にのみ便利です。その場合のよりよい解決策は、代わりに実際のインターフェースを用意し、デフォルトの実装をmixinとして提供することです。

+0

私は同意します。私はインターフェイスに行きます。 – zaphnat

0

インターフェイスに私の投票があります。そうすれば、インタフェースを定義する限り、開発者はあまりにも多くのコードを配布しなくても、かなり簡単に互換性のあるものを書くことができます。

関連する問題