デリゲート インターフェイス メソッドまたはデリゲート実装メソッドを呼び出す必要がありますか?
もちろん、両方を行うこともできますが、インターフェイスに依存することで、オブジェクト間の密結合を回避できます。
インターフェイスを一般的な契約と考え、その具体的な実装を契約のすべての詳細を含むインスタンスと考えてください。
簡単なケースを想像してみてください。それは契約サービスです。すべての実装が 1 つのメソッドのみに従うように強制するインターフェイスを作成できますgetAllContacts
。したがって、インターフェースは次のようになります。
public interface ContactBookInterface {
public List<Contact> getAllContacts ();
}
インターフェイスは、データが内部でどのように保存されているか、どこから来たのかなどの詳細について気にしません。これらの詳細はすべて実装に含まれています。次の 2 つの実装を検討できます。
public class ContactBookService implements ContactBookInterface {
private ContactDAO contactDAO;
...
public List<Contact> getAllContacts() {
return contactDAO.findAll();
}
}
と
public class ContactBookMockService implements ContactBookInterface {
private List<Contact> contacts;
public ContactBookMockService() {
contacts = populateMockContacts();
}
...
public List<Contact> getAllContacts() {
return contacts;
}
}
ここで、プログラムの観点からは、次のマネージド Bean を使用できます。
@ManagedBean
...
public void ContactsBean {
private ContactBookInterface cbi;
...
}
このような設計では、具体的な実装は重要ではなく、適切な依存性注入によって処理されます。このアプローチでは実装設計に縛られていないことに注意することが重要です。コードは疎結合であるため、実装を新しいものに簡単に置き換えることができます。