最近在做一个监听,初步打算是用线程不断接收消息(感觉比较弱智的做法),但考虑效率和内存的问题,打算参考下android的onclick事件的实现,系统是使用观察者模式,所以参考了一些观察者模式的例子,有一个很不错,分享下
三个徒弟就唐僧
唐僧是目标
三个徒弟是观察者
public class Tangseng {
ArrayList<Person> lists;
public Tangseng() {
lists = new ArrayList<Person>();
}
public void register(Person p) {
lists.add(p);
}
public void unRegister(Person p) {
lists.remove(p);
}
public ArrayList<String> help() {
ArrayList<String> arraylist = new ArrayList<String>();
for (Person p : lists) {
arraylist.add(p.save());
}
return arraylist;
}
}
接下来就是三个徒弟类了,每个徒弟都有一个救师傅的方法,这是悟空类:
[java] public class Wukong implements Person {
@Override
public String getName() {
return "孙悟空";
}
@Override
public String save() {
return this.getName() + "去救师傅了";
}
}
八戒类:
[java] public class Bajie implements Person {
@Override
public String getName() {
return "八戒";
}
@Override
public String save() {
return this.getName() + "去救师傅了";
}
}
沙僧类:
[java] public class Shaseng implements Person {
@Override
public String getName() {
return "沙僧";
}
@Override
public String save() {
return this.getName() + "去救师傅了";
}
}
师傅一喊救命,三个徒弟就会去救他,这里最后的实现类:
[java] public class XiyoujiActivity extends Activity {
private ListView listView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView1);
Tangseng tangseng = new Tangseng();
tangseng.register(new Wukong());
tangseng.register(new Bajie());
tangseng.register(new Shaseng());
ArrayList<String> lists = tangseng.help();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, lists);
listView.setAdapter(adapter);
}
}
public class XiyoujiActivity extends Activity {
private ListView listView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView1);
Tangseng tangseng = new Tangseng();
tangseng.register(new Wukong());
tangseng.register(new Bajie());
tangseng.register(new Shaseng());
ArrayList<String> lists = tangseng.help();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, lists);
listView.setAdapter(adapter);
}
}