忙里抽闲,继续学习设计模式,作为自己的读书笔记,这次介绍Java下实现的观察者模式。
观察模式需要了解的三个概念:
被观察者:被观察的对象,发生变化会通知观察者集合(存放观察者的容器)
观察者:有update方法,当观察者发生变化的时候,update方法会被调用
主类:实例化观察者,并向被观察者,添加观察者对象。
追求目标:被观察变化,观察者做出反应!!!
实现如下:
Game类,就是一个普通对象,被GameMan类管理。
1 public class Game {
2 String name = "";
3 String company = "";
4
5 public String getName() {
6 return name;
7 }
8 public void setName(String name) {
9 this.name = name;
10 }
11 public String getCompany() {
12 return company;
13 }
14 public void setCompany(String company) {
15 this.company = company;
16 }
17 }
GameMan类,有发布Game的方法,并适时做出改变。
1 import java.util.Observable;
2
3 public class GameMan extends Observable {
4 public void PublishGame(String name, String company)
5 {
6 Game game = new Game();
7 game.setName(name);
8 game.setCompany(company);
9 this.setChanged();
10 this.notifyObservers(game);
11 }
12 }
MyObserver类,实现update接口。处理一些被观察者发生变化后的操作。
1 import java.util.Observable;
2 import java.util.Observer;
3
4 public class MyObserver implements Observer {
5
6 @Override
7 public void update(Observable o, Object arg) {
8 System.out.println("游戏管理者发布了新游戏!");
9 Game game = (Game)arg;
10 System.out.println("新游戏的名字:" + game.getName());
11 System.out.println("新游戏的开发公司:" + game.getCompany());
12 }
13 }
MainClass类,主类,向被观察者注册观察者。
1 public class MainClass {
2 public static void main(String[] args) {
3 GameMan gameMan = new GameMan();
4 gameMan.addObserver(new MyObserver());
5 gameMan.PublishGame("NGame", "WhiteTaken");
6 }
7 }
运行之后的结果。
至此,观察者模式介绍完毕。