インターフェイスは、インターフェイスの要件を満たしていることの検証を許可しながら、クラスの実装を切り替えることができるので便利です。にあなたを可能に
sayQuack(Quackable quackable) {
quackable.quack();
}
:
interface Quackable {
void quack();
}
はこれのようなメソッドに渡されるクラスの要件を定義しています
は、以下の(頻繁に使用される)例を見てみましょう次のようなQuackableオブジェクトの実装を利用してください:
class MockDuck implements Quackable {
void quack() => print("quack");
}
class EnterpriseDuck implements Quackable {
void quack() {
// connect to three enterprise "ponds"
// and eat some server bread
// and say "quack" using an messaging system
}
}
これらの両方の実装はsayQuack()関数で動作しますが、一方のインフラストラクチャには他のインフラストラクチャよりも大幅に少ないインフラストラクチャが必要です。いくつかの「企業鴨」を活用したソリューションを構築するとき、私は、Javaの世界では、このパターンのすべての時間を使用し
sayQuack(new EnterpriseDuck());
sayQuack(new MockDuck());
。ローカルで開発するときは、単にsayQuack()関数を呼び出してハードコードされた模擬データを返すだけでよいだけです。ダートは、任意に入力されているので
を入力ダック
ツールはできませんが、あなたが実際に(単に正しいメソッドのシグネチャがうまくいく含むクラスを書いて、インタフェースを使用する必要はありませんそれを検証する)。
class Person { // note: no implements keyword
void quack() => "I'm not a duck";
}
sayQuack(new Person()); // provides the quack method, so this will still work
すべてのクラスは最後に、すべてのクラスもインターフェイスです
インターフェイスです。これは、たとえサードパーティ製のシステムがインターフェイスを使わずに書かれたとしても、具体的なクラスをインターフェイスのように使用できることを意味します。例えば
、次のエンタープライズライブラリ想像:
class EnterpriseDuck { // note: no implements keyword
void quack() {
// snip
}
}
sayQuack(EnterpriseDuck duck) { // takes an instance of the EnterpriseDuck class
duck.quack();
}
をそして、あなたは型チェッカーが検証できるような方法でsayQuack方法にモックアヒルを渡したいです。あなたは、単にインタフェースとしてEnterpriseDuckを使用することにより、EnterpriseDuckによって暗黙のインタフェースを実装するために、あなたのmockDuckを作成することができます。
class MockDuck implements EnterpriseDuck {
void quack() => "I'm a mock enterprise duck";
}
多重継承
多重継承の面では、これはダートでは不可能です。あなたは、しかし、複数のインターフェースを実装し、必要なメソッドの独自の実装を提供することができ、例えば:あなたはダーツを使用すると、あなたは、ほとんどの「クラスが見つかります
class MultiDuck implements Quackable, EnterpriseDuck, Swimable {
// snip...
}
のインターフェイスは、デフォルトのクラスを持つことができます"は実際にインターフェイスです。リスト、文字列などはすべて、デフォルトの実装が提供されているインターフェイスです。あなたが電話をするとき
List myList = new List();
実際にはListインターフェイスを使用しています。新しいキーワードは、インターフェイスから基になるデフォルトのList実装にリダイレクトされます。チームに
インタフェースを開発に関して
も、オープンソースの世界では、チーム開発に有用です。インターフェイスは、コンポーネントが自分のコンポーネントで動作するように構築する必要があるメソッドとプロパティを定義します。そのインタフェースの独自のテスト実装を構築することができ、私はそのインタフェースの具体的な実装を構築することができます。両方が完了したら、統合することができます。公開された共有インターフェースがなければ、私が具体的な実装を提供してから、本当に始めることができます。
希望に役立ちます!
本当にありがとう、クリス、それはまさに私が必要としていたものです。また、例のクラス名は愛らしいです。 – snitko
はあなたのコードの2つのコメントは、「// note:no implements keyword」ではなく「// note:no interface keyword」と考えています。 – GameAlchemist
これを更新するか、インターフェイスキーワードがDartで使用されなくなったことを説明するこの記事にコメントを追加することを検討してください。 –