PM 設計 (MVC + プレゼンテーション モデル) でアプリを作成しようとしていますが、プレゼンテーション モデル クラスでモデル クラスを巧みにラップする方法については既に固執しています。ここで、Model クラスのインスタンスの値に基づいて画像とテキストを変更する簡単なコードを記述します。
// Disclaimer:
// View and Controller are merged in this sample for clarity's sake.
列挙型
Enum AnimalSpecies {
Dog, Cat, Rabbit, Bird,
}
MVC + RM の M
class Model extends Observable {
// in my actual code Model has 10+ member variables and most of them are Enum
protected AnimalSpecies species;
protected String name;
protected Object update;
public void setSpecies (AnimalSpecies species) {
this.species = species;
notifyUpdate(species);
}
public void setName (String s) {
this.name = s;
notifyUpdate(name);
}
public void notifyUpdate(Object o) {
this.update = o;
this.setChanged();
this.notifyObservers(update);
}
}
MVC の RM + RM
class PresentationModel extends Observable implements Observer {
@Override
public void update(Observable model, Object data) {
// Called when notified by Model
// No idea what to write... but what I want to do is,
// a) determine what text for View to display
// b) determine what pics for View to display,
// based on values of Model.
this.setChanged();
this.notifyObservers(update);
}
}
MVC + RMのVC
class View extends Activity implements Observer {
// This is View + Controller, so it'd implement some interfaces like onClickListener,
// and in events such as onClick(), values of Model class are changed,
// but for clarity's sake, I keep everything in onCreate() event.
TextView header;
TextView footer
ImageView imgview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
header = (TextView) findViewById(R.id.header);
footer = (TextView) findViewById(R.id.footer);
imgview = (ImageView) findViewById(R.id.imgview);
Model model = new Model();
PresentationModel pm = new PresentationModel();
model.addObserver(pm);
pm.addObserver(this);
model.setSpecies(AnimalSpecies.Cat);
model.setName("Max");
}
@Override
public void update(Observable pm, Object data) {
// Called when notified by PresentationModel
// *** varies based on parameters from PresentationModel
header.setText(***);
footer.setText(***);
imgview.setImageResource(R.drawable.***);
}
}
public void update()
私の質問:クラスのロジックを記述する方法はPresentationModel
? Object
から変数しか取得できず、NotifyObserver()
入れ子になったswitch
or if
...else
を使用しても、コードがまったく思い浮かびません...