一直对设计模式的运用充满好奇,感觉好厉害的样子。今天首先学习一下观察者模式的运用,不学不知道,一学还真奇妙!哈哈。
发现观察者模式的运用有两种方法,一种是 面向接口的编程思想 的 用法。一种是java内置的观察者模式。我个人还是喜欢后者的用法的,下面就讲一下后者的用法,很简单的哦!
情节模拟:当你网购买了东西后,快递到了,快递员给你发通知消息。
关键代码:
写一个类实现 Observer 的接口。
import java.util.Observable;
import java.util.Observer;
/**
* Created by abc on 2016/12/14.
*/
public class Observer1 implements Observer {
private String name;
public Observer1(String msg) {
name = msg;
}
@Override
public void update(Observable observable, Object data) {
System.out.println(name + "收到快递通知,内容是:" + data);
}
}
再写一个类继承自 Observable 。
import java.util.Observable;
/**
* Created by abc on 2016/12/14.
*/
public class PostMan extends Observable {
public void sendMessage(String msg) {
setChanged();//标识状态或者内容发生改变
notifyObservers(msg);
}
}
MainActivity.java 的具体实现
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PostMan postMan = new PostMan();
Observer1 observer1 = new Observer1("小明");
Observer1 observer2 = new Observer1("小虹");
postMan.addObserver(observer1);//添加观察者
postMan.addObserver(observer2);
//postMan.deleteObserver(observer1);//删除观察着
postMan.sendMessage("您的快递到了,请到门口来取吧!");
}
});
}
}
日志打印:
最后附上一张UML 图:
不太懂UML的同学要学一学这方面的知识哦。