【第17条】インタフェースは、タイプの定義にのみ使用される

1393 ワード

クラスがインタフェースを実装すると、このインタフェースはクラスのインスタンスを参照できるタイプ(type)として使用されます.それ以外の目的でインタフェースを定義するのは適切ではありません.
 
すなわち、Interface objct=new Class();//を選択します.
 
例:List list 1=new ArrayList()//Listはインタフェース、ArrayListは実装クラス
 
本の中で極端な例を挙げた--定数インタフェース.すなわち,静的finalドメインのみのインタフェースであり,インタフェースの不良使用である.
 
この2,3日、私のFrameworkでビジネスJavaBeanのスーパークラスとして現れる抽象クラスが、インタフェースを実現させるべきかどうかを考えています.歴史的な経験から、インタフェースを使うプロジェクトを見たことがありますが、使わないものもあります.
 
すべてのビジネスJavaBeanのスーパークラスとして、SuperBeanにはエラー情報などの共通のドメインと対応するgetter/setterメソッドがあります.SuperBeanでは、ページをめくる(GUIインタフェースでページをめくる)ことをサポートできるPageBeanも派生することができ、ページをめくる(ページごとに表示される件数を設定したり、総ページ数を取得したり、後ろにページをめくるなど)ドメインや方法も含まれている.これらの方法はSuperBeanとPageBeanの2つの抽象クラスで実装されている.では、2つのインタフェース(SuperBeanHandler,PageableBean)を書いて実現させることを考えるべきではないでしょうか.私はずっとためらっていて、この2つのインタフェースがなくてもいいように見えますが、松結合の観点から、この2つのインタフェースがあってから、この2つの抽象クラスを実現すべきではないでしょうか.
 
これを見たことがありますが、そう書きますか.
SuperBeanHandler  staff1 = new StaffBean();

PageableBean  staffList = new StaffListPageBean();

 
それはできないと思います.だから、ここではインタフェースを使う必要はないようです.
 
 
以上の段落は、実は私はまだあいまいで、本編は同時にフォーラムOO版に送って、もっと多くの友达が私にいくつかの良い提案をくれることを望んでいます.
 
 
 
 
【Effective Java学習ノート】シリーズ連載特集:http://tonylian.iteye.com/categories/64208