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

来源:互联网 发布:凸包算法代码 编辑:程序博客网 时间:2024/05/17 05:01

作为一名程序员,不知道设计模式那我们只能是每个挣一些饿不死的工资,外加一个牛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());    }}

综合上述,观察者模式很好的解决了当数据放生变化时,更新所有相关的当事人。

0 0
原创粉丝点击