设计模式之GOF23的Observer
来源:互联网 发布:淘宝替人代付用信用卡 编辑:程序博客网 时间:2024/05/16 06:27
说明:观察者执行观察行为,添加被观察对象到观察列表中。
案1:
利用JDK的类:
package hiya.observer.jdk;
import java.util.Observable;
import java.util.Observer;
// this is a subject(观察者:执行观察行为的人)
public class BeingWatched extends Observable{
void doBusiness() {
for (int period = 5; period >= 0; period--) {
if (true) {
super.setChanged();
}
notifyObservers( new Integer ( period ) );
try {
Thread.sleep(100);
} catch (InterruptedException e) {
System.out.println("Sleep interrupeted");
}
}
}
public static void main(String [] args) {
//创建一个观察者 chf@tsinghua.org.cn
BeingWatched subject = new BeingWatched();
//创建两个被观察者
Observer mailObserver = new MailObserver();
Observer countObserver = new CountObserver();
//把两个被观察者加到观察者列表要观察的对象列表中
subject.addObserver(mailObserver);
subject.addObserver(countObserver);
//执行业务操作
subject.doBusiness();
}
}
package hiya.observer.jdk;
import java.util.Observable;
import java.util.Observer;
public class CountObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("Update() called, count is " + ((Integer) arg).intValue());
}
}
package hiya.observer.jdk;
import java.util.Observable;
import java.util.Observer;
public class MailObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("You is sending mail!....OK");
}
}
执行结果:
Update() called, count is 5
You is sending mail!....OK
Update() called, count is 4
You is sending mail!....OK
Update() called, count is 3
You is sending mail!....OK
Update() called, count is 2
You is sending mail!....OK
Update() called, count is 1
You is sending mail!....OK
Update() called, count is 0
You is sending mail!....OK
比较简单容易理解.
以下是自己写的:(1)用监听 (2)大部分相同,只修改不一样的地方
package hiya.observer;
public class ObserverPatternTest {
/**
* [メソッドの説明を書きましょう]
* @param args
*/
public static void main(String[] args) {
Subject subject1 = new Subject();
Subject subject2 = new Subject();
subject1.addPaymentListener(new Observer(){
public String Action(SubjectEvent subjectEvent){
return subjectEvent.getText() + " with cash. ";
}
});
subject2.addPaymentListener(new Observer(){
public String Action(SubjectEvent subjectEvent){
return subjectEvent.getText() + " with credit. ";
}
});
subject1.setAmount(777);
subject2.setAmount(888);
System.out.println(subject1.sellAction());
System.out.println(subject2.sellAction());
}
}
package hiya.observer;
import java.util.EventListener;
public interface Observer extends EventListener{
public String Action(SubjectEvent subjectEvent);
}
package hiya.observer;
import java.util.ArrayList;
public class Subject {
private double amount;
private ArrayList eventListenerLst;
public void addPaymentListener(Observer observer){
if (eventListenerLst == null){
eventListenerLst = new ArrayList();
}
if (!eventListenerLst.contains(observer)){
eventListenerLst.add(observer);
}
}
public void removePaymentListener(Observer observer){
if (eventListenerLst != null && eventListenerLst.contains(observer)){
eventListenerLst.remove(observer);
}
}
public String sellAction(){
String sellAction = null;
String preSellAction = "You has payment ";
sellAction = preSellAction;
sellAction += amount;
SubjectEvent subjectEvent = new SubjectEvent(this, sellAction);
sellAction = activeEvent(subjectEvent);
sellAction += " I am selecting warehouse, Please waiting...";
return sellAction;
}
private String activeEvent(SubjectEvent subjectEvent) {
//String text = subjectEvent.getText();
String text = "";
if (eventListenerLst != null){
for (int i=0; i< eventListenerLst.size(); i++){
Observer observer = (Observer)eventListenerLst.get(i);
text += observer.Action(subjectEvent);
}
}
return text;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
package hiya.observer;
import java.util.EventObject;
public class SubjectEvent extends EventObject {
private String text;
// http://hiyachen.blog.chinaunix.net
public SubjectEvent(Object source, String text) {
super(source);
setText(text);
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
执行结果
You has payment 777.0 with cash. I am selecting warehouse, Please waiting...
案1:
利用JDK的类:
package hiya.observer.jdk;
import java.util.Observable;
import java.util.Observer;
// this is a subject(观察者:执行观察行为的人)
public class BeingWatched extends Observable{
void doBusiness() {
for (int period = 5; period >= 0; period--) {
if (true) {
super.setChanged();
}
notifyObservers( new Integer ( period ) );
try {
Thread.sleep(100);
} catch (InterruptedException e) {
System.out.println("Sleep interrupeted");
}
}
}
public static void main(String [] args) {
//创建一个观察者 chf@tsinghua.org.cn
BeingWatched subject = new BeingWatched();
//创建两个被观察者
Observer mailObserver = new MailObserver();
Observer countObserver = new CountObserver();
//把两个被观察者加到观察者列表要观察的对象列表中
subject.addObserver(mailObserver);
subject.addObserver(countObserver);
//执行业务操作
subject.doBusiness();
}
}
package hiya.observer.jdk;
import java.util.Observable;
import java.util.Observer;
public class CountObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("Update() called, count is " + ((Integer) arg).intValue());
}
}
package hiya.observer.jdk;
import java.util.Observable;
import java.util.Observer;
public class MailObserver implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("You is sending mail!....OK");
}
}
执行结果:
Update() called, count is 5
You is sending mail!....OK
Update() called, count is 4
You is sending mail!....OK
Update() called, count is 3
You is sending mail!....OK
Update() called, count is 2
You is sending mail!....OK
Update() called, count is 1
You is sending mail!....OK
Update() called, count is 0
You is sending mail!....OK
比较简单容易理解.
以下是自己写的:(1)用监听 (2)大部分相同,只修改不一样的地方
package hiya.observer;
public class ObserverPatternTest {
/**
* [メソッドの説明を書きましょう]
* @param args
*/
public static void main(String[] args) {
Subject subject1 = new Subject();
Subject subject2 = new Subject();
subject1.addPaymentListener(new Observer(){
public String Action(SubjectEvent subjectEvent){
return subjectEvent.getText() + " with cash. ";
}
});
subject2.addPaymentListener(new Observer(){
public String Action(SubjectEvent subjectEvent){
return subjectEvent.getText() + " with credit. ";
}
});
subject1.setAmount(777);
subject2.setAmount(888);
System.out.println(subject1.sellAction());
System.out.println(subject2.sellAction());
}
}
package hiya.observer;
import java.util.EventListener;
public interface Observer extends EventListener{
public String Action(SubjectEvent subjectEvent);
}
package hiya.observer;
import java.util.ArrayList;
public class Subject {
private double amount;
private ArrayList eventListenerLst;
public void addPaymentListener(Observer observer){
if (eventListenerLst == null){
eventListenerLst = new ArrayList();
}
if (!eventListenerLst.contains(observer)){
eventListenerLst.add(observer);
}
}
public void removePaymentListener(Observer observer){
if (eventListenerLst != null && eventListenerLst.contains(observer)){
eventListenerLst.remove(observer);
}
}
public String sellAction(){
String sellAction = null;
String preSellAction = "You has payment ";
sellAction = preSellAction;
sellAction += amount;
SubjectEvent subjectEvent = new SubjectEvent(this, sellAction);
sellAction = activeEvent(subjectEvent);
sellAction += " I am selecting warehouse, Please waiting...";
return sellAction;
}
private String activeEvent(SubjectEvent subjectEvent) {
//String text = subjectEvent.getText();
String text = "";
if (eventListenerLst != null){
for (int i=0; i< eventListenerLst.size(); i++){
Observer observer = (Observer)eventListenerLst.get(i);
text += observer.Action(subjectEvent);
}
}
return text;
}
public double getAmount() {
return amount;
}
public void setAmount(double amount) {
this.amount = amount;
}
}
package hiya.observer;
import java.util.EventObject;
public class SubjectEvent extends EventObject {
private String text;
// http://hiyachen.blog.chinaunix.net
public SubjectEvent(Object source, String text) {
super(source);
setText(text);
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
执行结果
You has payment 777.0 with cash. I am selecting warehouse, Please waiting...
You has payment 888.0 with credit. I am selecting warehouse, Please waiting...
如果想了解更多相关的资料请关注(深圳家装公司 www.cjxzs.com)官网
0 0
- 设计模式之GOF23的Observer
- GOF23设计模式之工厂方法模式的实现
- GOF23设计模式之抽象工厂模式的实现
- GOF23设计模式之适配器模式的实现
- GOF23设计模式之桥接模式的实现
- GOF23设计模式之组合模式的理解
- GOF23设计模式之享元模式的实现
- GOF23设计模式之中介者模式的理解
- GOF23设计模式之中介者模式的实现
- GOF23设计模式之状态模式的理解与实现
- GOF23设计模式之简单工厂的实现
- 设计模式之Observer
- 设计模式之Observer
- 设计模式之Observer
- 设计模式之--Observer
- 设计模式之--Observer
- 设计模式之Observer
- 设计模式之Observer
- php文件头信息详解
- myeclipse下java调用weka
- AIX 5.3/6.1环境下安装Oracle 10gR2 RAC常见报错
- javaLog设计流程
- php防止sql注入,字符串变量检查
- 设计模式之GOF23的Observer
- PowerDesinger联系的定义及使用
- Android开发---类似QQ分组列表的实现案例
- 今天第一件事 是?
- java 笔记
- 5个强盗分100颗宝石
- Python 字符串操作
- apache开启伪静态
- RSA前端JS加密,后端JAVA解密实现