设计模式之观察者

来源:互联网 发布:vip视频解析源码 编辑:程序博客网 时间:2024/04/26 18:30

最近在做一个监听,初步打算是用线程不断接收消息(感觉比较弱智的做法),但考虑效率和内存的问题,打算参考下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);

 }
}

原创粉丝点击