※ 引述《neigence ()》之銘言:
類似 visitor pattern 吧?
: Object obj;
: while((obj= ois.readObject())!=null){
: SomeOne.doSomething(obj);
^^^^^^^^^^^^^^^^^^^^^^^^^
改成 obj.doSomething(); 決定呼叫哪個 doSomething
並加上以下:
: }
: //----------------------------------------------------------------
: class SomeOne{
: public void doSomething(B b){...}
: public void doSomething(C c){...}
: public void doSomething(D d){...}_
: }
abstract class A{
public abstract void doSomething();
}
class B extends A{
@Override
public void doSomething(){ SomeOne.doSomething(this); }
};
class C extends A{
@Override
public void doSomething(){ SomeOne.doSomething(this); }
};
這邊會有重複的動作,應該逃不掉。
概念是把原本要由你來判斷的 type 資訊,
改由 dynamic binding, 也就是俗稱多型的方式處理。
透過這個方式,再把方向反轉一次的話,
連 multi-method 都能勉強模擬..
--
By Gamers, For Gamers - from the past Interplay
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.128.121.87