java中的观察者设计模式
2016-09-23 20:08
375 查看
观察者设计模式的作用:
1:观察者设计模式在被观察者和观察者之间建立一个抽象的耦合。被观察者知道的只是一个具体的观察者列表
2:由于观察者和被观察者没有紧密的耦合在一起,因此他们属于不同的抽象化层次。如果被观察者和观察者被扔到一起,那么这个对象比然跨越抽象化和具体化层次。
3:观察者模式支持广播通讯。被观察者会向所有的登记的观察者发出通知。
了解更多请参考API文档的Observer
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
观察者模式的原理:
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);
}
}
1:观察者设计模式在被观察者和观察者之间建立一个抽象的耦合。被观察者知道的只是一个具体的观察者列表
2:由于观察者和被观察者没有紧密的耦合在一起,因此他们属于不同的抽象化层次。如果被观察者和观察者被扔到一起,那么这个对象比然跨越抽象化和具体化层次。
3:观察者模式支持广播通讯。被观察者会向所有的登记的观察者发出通知。
了解更多请参考API文档的Observer
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
观察者模式的原理:
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);
}
}
相关文章推荐
- java设计模式-观察者模式
- Java设计模式:单态模式,工厂模式,代理模式,观察者模式示例
- java常用类库续3(比较器Comparable、Comparator、观察者设计模式、正则表达式、定时调度)
- java设计模式:观察者模式(Observer)
- JAVA设计模式-观察者模式简单例子
- 使用观察者模式实现Java应用程序设计MVC模式
- Java设计模式_行为模式_观察者模式
- 设计模式---观察者模式(Observer Pattern with java)
- Java设计模式—观察者模式(Observer pattern)
- java 设计模式-观察者模式
- Java设计模式 -- 观察者模式(push方式)
- All About JAVA 关于设计模式中的“观察者模式”
- java设计模式_观察者模式
- Java设计模式-----Observer观察者模式
- Java设计模式之Observer 观察者模式
- Java设计模式 -- 观察者模式(pull方式)
- Java设计模式 Design Pattern:观察者模式 Observer Pattern
- Java设计模式 Design Pattern:观察者模式 Observer Pattern
- 【设计模式】observer观察者模式:模拟java.awt.Button事件监听。
- 设计模式---观察者模式(Observer Pattern with java)