【发布时间】:2015-04-08 18:20:39
【问题描述】:
我正在开发一个应用程序,其中列表必须显示同一接口的不同实现(例如,TextImplementation、VideoImplementation、AudioImplementation 等)。在这种情况下,让模型返回其视图是否是一个好的设计?
下面是一些代码示例,演示了我的想法。 请注意,模型实际上并不设计视图,它只是返回它的一个实例。
public interface Impl{
public Object getQuestion();
public String getAnswer();
public View getListCellView();
}
public class AudioImpl implements Impl{
private File audioFile;
private String answer;
public Audio getQuestion(){
Audio a = Audio.fromFile(audioFile);
return a;
}
public String getAnswer(){
return answer;
}
public View getListCellView(){
return new AudioListCellView(audioFile);
}
}
public class AudioListCellView extends View{
private File file;
public AudioListCellView(File audioFile){
this.file = audioFile;
}
public View createView(){
AudioPlayer ap = new AudioPlayer();
ap.addOnClickListener(new OnClickListener(){
public void onClick(ClickEvent e){
play(this.file);
}
});
this.addView(ap,Layout.CENTER);
}
}
我考虑这个设计的原因是因为在渲染列表项时,我可以简单地写这样的东西:
class QuestionsListView extends ListView{
private Collection<Impl> list;
public View getCellView(int position){
Impl anImpl = list.get(position);
return anImpl.getListCellView();
}
}
这种设计有缺点吗?如何改进?
【问题讨论】:
标签: design-patterns model-view-controller