これは私がシングルトンとオブザーバーに触発されているが、実際にはどちらも問題に取り組んできたコードです。これは他のパターンですか、それともちょうどmuttですか?このコンテキストは、複数のアクティビティオブジェクトが特定のアカウントに関連付けられているオブジェクトに関心を持つAndroidアプリです。最初のアクティビティが登録されたときにデータをロードし、オブザーバがなくなるとデータを一度転送します。これはObserverパターンなのでしょうか?
たとえば、クラス変数とメソッドを使用してこれらのオブジェクトやオブザーバを管理することは恐ろしい考えですか?どんなフィードバックでも歓迎です。
この質問は、オブザーバーに登録しているオブジェクトがすでに存在するかどうかをオブザーバーにいつ通知するかについての質問として開始されました。私が質問をタイプしていたとき、純粋なObserver ObservableのObservable はであり、興味深いのは静的メソッドが関与していないことに気付きました。
public class MyObserver{
public MyObserver(String id){
MyObservable.addObserver(this, id);
}
public void update(MyObservable myObservable){
... do something with myObservable ...
... maybe based on myObservable.id ...
}
}
public class MyObservable{
/*********************************
* Object management static code *
*********************************/
private static Map<String,Set<MyObserver>> observers;
static{
observers = new Map<String,Set<MyObserver>>();
}
private static Map<String,MyObservable> instances;
static{
instances = new HashMap<String,MyObservable>();
}
private static void addObserver(MyObserver myObserver, String id){
Set<MyObserver> myObservers = observers.get(id);
if(myObservers==null){
myObservers = new Set<MyObserver>();
observers.put(myObservers);
}
myObservers.add(id);
MyObservable instance = instances.get(id);
if(instance!=null){
myObserver.update(instance);
} else {
loadData(id);
}
}
private static void removeObserver(MyObserver myObserver, String id){
Set<MyObserver> myObservers = observers.get(id);
if(myObservers!=null){
myObservers.remove(myObserver);
if(myObservers.isEmpty()){
instances.remove(id);
}
}
}
private static void loadData(String id){
MyObservable myObservable = ... asynchronous code to load myObservable ...
... callback will call MyObservable.set(id, myObservable); ...
}
private static void set(MyObservable myObservable){
String id=myObservable.getId();
instances.put(id, myObservable);
Set<MyObserver> myObservers = observers.get(id);
if(myObservers!=null){
for(MyObserver myObserver:myObservers){
myObserver.update(myObservable);
}
}
}
/**********************************************
* Data Object instance variables and methods *
**********************************************/
public MyObservable(String id){
myId=id;
}
private string myId;
private String myData1;
private String myData2;
private String myData3;
... getters and setters ...
}
大雑把に言えば、私はあなたの統計量の過剰使用に満足できません。 –
いくつかの統計の使用にコメントしています。私はそれが扱われるようにそれらを使用するための私の理由を与えたいと思います。アイデアは、クラスが独自のオブジェクトを管理することです。シングルトンのパターンとよく似ています。もちろん、1つのインスタンスの合計を保持します。この場合、IDパラメータがあるため、ただ1つではなくインスタンスのマップがあります。Observableの各インスタンスはオブザーバの独自のマップを持つことができましたが、各オブジェクトを元の目的に沿わせ、すべてのオブジェクト*管理タスクをクラスに残したかったのです。 – UFL1138