(@WhiteTaken)设计模式学习——观察者模式

忙里抽闲,继续学习设计模式,作为自己的读书笔记,这次介绍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 }

运行之后的结果。

至此,观察者模式介绍完毕。

posted @ 2017-10-17 22:34  WhiteTaken  阅读(149)  评论(0)    收藏  举报