您的位置:首页 > 编程语言 > Java开发

java中的观察者设计模式

2016-09-23 20:08 375 查看
观察者设计模式的作用:
1:观察者设计模式在被观察者和观察者之间建立一个抽象的耦合。被观察者知道的只是一个具体的观察者列表
2:由于观察者和被观察者没有紧密的耦合在一起,因此他们属于不同的抽象化层次。如果被观察者和观察者被扔到一起,那么这个对象比然跨越抽象化和具体化层次。
3:观察者模式支持广播通讯。被观察者会向所有的登记的观察者发出通知。 
了解更多请参考API文档的Observer





观察者模式的原理:
1:建立两个接口Subject,Observer
2:建立两个实现类:Doll,Person
3:建立一个主类:Test
Doll的价格有变动立即通知Person

代码:
Subject:

package java339to343;
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObserver();
}

Observer:

package java339to343;
public interface Observer {
public void update(float price);
}

Doll:

package java339to343;

import java.util.Vector;

public class Doll implements Subject{
//被观察者维护的一个对象列表
private Vector v=new Vector();
private float price;
public Doll(float price){
this.price=price;
}

public void setPrice(float price) {
this.price = price;
notifyObserver();
}

@Override
public void registerObserver(Observer o) {
v.add(o);
}
//取消观察者
@Override
public void removeObserver(Observer o) {
v.remove(0);
}
//通知所有观察者
@Override
public void notifyObserver() {
for (Observer o : v) {
o.update(price);
}
}

}

Person:

package java339to343;

public class Person implements Observer {
private String name;
public Person(String name){
this.name=name;
}
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public void update(float price) {
System.out.println(name+"关注的娃娃的价格已更新为:"+price);
}

}

Test:

package java339to343;

public class Test {

public static void main(String[] args) {
Doll d=new Doll(3000);
Person p1=new Person("小花");
Person p2=new Person("小华");
d.registerObserver(p1);
d.registerObserver(p2);
System.out.println("第一次促销:");
d.setPrice(2000);

System.out.println("第二次促销:");
d.setPrice(1500);
System.out.println("第三次促销:");
d.setPrice(998);
d.removeObserver(p2);
System.out.println("第二次促销:");
d.setPrice(568);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: