[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Observable,Observerへの応用
>class Hoge implements A, B {
>//class Hoge implements ABC { でも同じ※
> public static void main(String[] arg){
> test(new Hoge()); // ←エラー
このエラーは、複数で開発している場合などは起こりそうですね。
> void test(AB ab){
この引数を java.lang.Object にしてしまい、instanceof で検査する戦略は
いかがでしょう。
>みたいなのがあまり多くなると、そのスーパータイプ達を実装している人が、
>それらを合成したもの(サブタイプ)で実装していなければならないといったこ
>とに気づくのが遅れる可能性があるんじゃないかと.
本来、class Hoge implements A, B { みたいなパターンが繰り返し出てきたら
それらをまとめて interface AB extends A, B みたいにして抽出して
class Hoge implements AB と書き換えていく戦略ではないかと解釈しています。
>結局設計段階でそのinterfaceが使われる必然性が明確になるように(特に名前
>について)十分検討した上で切り出すべきだと思います.
私もこれは賛成です。
># 例えば紹介された本(読んでないのですが)からの引用にあるIName,
># INameAddressと言った名前からはその役割が推測できませんでした.
>
>使うかどうか解らないけどinterfaceにしとこうということはありますが、ア
>クセッサメソッドを片っ端からinterfaceにすることは個人的にはどうかなと
>思います.(意味が直感的に分かる名前ならいいけど)
私は 1 アクセッサー 1 interface の戦略にびっくりしてそればかり強調した
のが悪かったかも知れません。Coad が前掲書で書いた例題は適切なものだったと
思います。
INameAdress とはちょっと文脈が異なる例ですが、
例えば5章の「通知を利用した戦略」で、
java.util.Obserbable / Observer を使うかどうかという問題について、
「継承に適した例では無い」と判断した Coad は、
public interface IObserver {
void update(Object theObserved, Object changeCode);
}
public interface IObervable {
void addIObserver(IObserver anIObserver);
void deleteIObserver(IObserver anIObserver);
void deleteIObservers();
}
という2つの interface を書いて Observable, Observer を実現しています。
この応用で、Repeater (中継者) を間に挟んだ例を扱い、
public interface IRepeater extends IObservable, IObserver {}
という interface を導入しています。
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル8F FAX 03-5362-9008