您的位置:首页 > 其它

我用图来说设计模式一(观察者模式)

2016-02-28 21:55 309 查看
作为一名程序员,不知道设计模式那我们只能是每个挣一些饿不死的工资,外加一个牛B的IT名号。

所以认识设计模式势在必行,但没必要全部指导,需要大家一步一步的来认识。

总体来说:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

常见的开发模式:

1. 观察者模式

2. 适配器模式

3. 列表内容

4. 工厂模式

5. 代理模式

6. 单例模式

7. 命令模式

8. ……

1.观察者模式(Observer Pattern)

what:

Observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。

以上是百度百科的解释。

Observier模式在执行时就好比小偷与保安的关系,被观察者就是小偷,观察者就是保安。只要小偷一出手,保安就立马做出反映。



就如上图所示,保安时刻在观察小偷,只要小偷一有偷这个动作,那么马上被通知到。

观察者模式主要有观察者和被观察者2个对象,在该模式中,Observable表示被观察者,这个对象是一个抽象类,只能被继承。 Observer表示观察者,他是一个接口,所以观察者可以有多个,实现了该接口的类都是属于观察

好了,废话少说,上代码。

这个是被观察者,来看看,他有两个很牛B的父类代码:

//告诉后台数据发生变化了

setChanged();

//告诉观察者可以开始行动了

notifyObservers();

呵呵 ,很明白了,不多说了 ,看完整代码吧。

package com.tedu.zab.observermode;
import java.util.Observable;
public class MyPerson extends Observable {
private int age;
private String name;
private String sax;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
//告诉后台数据发生变化了
setChanged();
//告诉观察者可以开始行动了
notifyObservers();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
//告诉后台数据发生变化了
setChanged();
//告诉观察者可以开始行动了
notifyObservers();
}
public String getSax() {
return sax;
}
public void setSax(String sax) {
this.sax = sax;
}
@Override
public String toString() {
return "MyPerson [age=" + age + ", name=" + name + ", sax=" + sax + "]";
}
}


这里是观察者代码。

观察者代码实现了Observer接口,重写了update方法,当调用被观察者被调用了notifyObservers()后,那update方法就被执行了。

package com.tedu.zab.observermode;

import java.util.Observable;
import java.util.Observer;

public class MyObserver implements Observer {
private int i;
private MyPerson myPerson;//观察的对象
public MyObserver(int i){
System.out.println("我是观察者---->" + i);
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public MyPerson getMyPerson() {
return myPerson;
}
public void setMyPerson(MyPerson myPerson) {
this.myPerson = myPerson;
}
@Override
public void update(Observable observable, Object data) {
System.out.println("观察者---->"+ i +"得到更新!");
this.myPerson = (MyPerson)observable;
System.out.println(((MyPerson)observable).toString());
}

}


综合上述,观察者模式很好的解决了当数据放生变化时,更新所有相关的当事人。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: