`

《Java设计模式 -- Observer》

阅读更多
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;


class WakenUpEvent {
	private long time;
	private String loc;
	private Child source;
	
	public WakenUpEvent(long time, String loc, Child source) {
		super();
		this.time = time;
		this.loc = loc;
		this.source = source;
	}
	public long getTime() {
		return time;
	}
	public void setTime(long time) {
		this.time = time;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
	public Child getSource() {
		return source;
	}
	public void setSource(Child source) {
		this.source = source;
	}
}

class Child implements Runnable {
	private List<WakenUpListener> wakenUpListeners = new ArrayList<WakenUpListener>();

	public void addWakenUpListener(WakenUpListener l) {
		wakenUpListeners.add(l);
	}
	
	void wakeUp() {
		for(int i=0; i<wakenUpListeners.size(); i++) {
			WakenUpListener l = wakenUpListeners.get(i);
			l.ActionToWakenUp(new WakenUpEvent(System.currentTimeMillis(), "bed", this));
		}
	}

	public void run() {
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		this.wakeUp();
	}
	
}

class Dad implements WakenUpListener {

	public void ActionToWakenUp(WakenUpEvent wakenUpEvent) {
		System.out.println("feed child");
	}
	
}

class GrandFather  implements WakenUpListener {

	public void ActionToWakenUp(WakenUpEvent wakenUpEvent) {
		System.out.println("hug child");
	}
	
}

class Dog implements WakenUpListener {

	public void ActionToWakenUp(WakenUpEvent arg0) {
		System.out.println("wang wang ...");
	}
	
}

interface WakenUpListener {
	public void ActionToWakenUp(WakenUpEvent wakenUpEvent);
}

public class Test {
	public static void main(String[] args) {
		Child c = new Child();
		
		
		String[] observers = PropertyMgr.getProperty("observers").split(",");

		for(String s : observers) {
			try {
				c.addWakenUpListener((WakenUpListener)(Class.forName(s).newInstance()));
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
		
		
		new Thread(c).start();
	}
}

class PropertyMgr {
	private static Properties props = new Properties();
	
	static {
		try {
			props.load(Test.class.getClassLoader().getResourceAsStream("com/bjsxt/dp/observer/observer.properties"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static String getProperty(String key) {
		return props.getProperty(key);
	}
}

class CryEvent {
}

abstract class Event {

}

 

 

利用java的现有方法

 

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

public class PriceObserver implements Observer {

    private float price = 0;

    public void update(Observable obj, Object arg) {
        if (arg instanceof Float) {
            price = ((Float) arg).floatValue();

            System.out.println("PriceObserver :price changet to " + price);
        }
    }
}

 

import java.util.Observable;

public class Product extends Observable {

    private float price;

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
        //设置变化点
        setChanged();
        notifyObservers(new Float(price));
    }

}

 

public class Test {

    public static void main(String[] args) {
        Product product = new Product();
        PriceObserver priceobs = new PriceObserver();
//加入观察者
        product.addObserver(priceobs);
        product.setPrice(9.22f);

    }

}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    JAVA设计模式-chm版

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...

    JAVA设计模式---100%推荐

    这篇名为"JAVA设计模式---100%推荐"的资源,可能是对Java设计模式的深入解析,旨在帮助开发者更好地理解和应用这些模式。 设计模式通常分为三类:创建型、结构型和行为型。创建型模式涉及对象的实例化过程,如单例...

    Java 设计模式-观察者模式(Observer)

    结合微信公众号讲解观察者模式,生动形象,关键是上手快啊

    JAVA设计模式--入门

    **Java设计模式——入门** 设计模式是软件开发中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。Java设计模式是面向对象编程中的一个重要概念,可以帮助开发者编写可复用、可维护、易于理解的代码。这...

    Java设计模式-第22章-观察者模式.ppt

    Java设计模式中的观察者模式(Observer Pattern)是一种对象行为型模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理和实时...

    java设计模式-part1

    Java设计模式是面向对象编程中的重要概念,它们是软件开发过程中经过验证的解决方案模板,用于解决常见的设计问题。本部分将深入探讨Java设计模式的基础,包括单例模式、工厂模式和观察者模式。 首先,我们从单例...

    java设计模式-观察者 小案例

    在这个"java设计模式-观察者 小案例"中,我们可能会看到一个简单的模拟,雅典娜作为观察者,而其他角色(如圣斗士)则是被观察的对象。雅典娜的角色代表了观察者,当被观察对象(比如某个事件或状态)发生变化时,她...

    JAVA design pattern-java设计模式

    Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的标准化方法。设计模式不是具体的代码或库,而是一种通用解决方案的描述,可以应用于各种编程语言,包括Java。在这个名为"JAVA ...

    《Java设计模式》课后答案-刘伟.rar

    《Java设计模式》是刘伟教授的一本关于设计模式的教材,主要面向高等学校的学生和对Java编程有深入兴趣的开发者。设计模式是软件工程中的一种重要思想,它封装了在特定场景下的问题解决方案,可以提高代码的可读性、...

    java-design-patterns-master_JAVAdesignpattens_java_design_

    《Java设计模式实战详解》 在Java编程领域,设计模式是一种通用、可重用的解决方案,用于解决在软件设计中常见的问题。这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在...

    设计模式-Java语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...

    Java 中的设计模式 - jdon

    《Java中的设计模式 - jdon》是一本深入探讨Java编程中设计模式的电子书,它主要聚焦于如何在实际开发中应用和理解这些经典的设计原则和模式。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见...

    设计模式-可复用面向对象软件的基础,JAVA设计模式

    Java设计模式是Java开发中的核心元素,它们分为三类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory...

    设计模式(Java 与模式-笔记 二)

    本文主要关注的是Java编程语言中的设计模式,结合“Java与模式-笔记二”的博客内容,我们将深入探讨其中的一些核心设计模式及其在实际开发中的应用。 首先,我们来谈谈单例模式(Singleton)。单例模式确保一个类...

    java设计模式-期末整理.docx

    在软件设计模式的世界里,命令模式、观察者模式、装饰模式、适配器模式、责任链模式、外观模式、中介者模式、抽象工厂模式以及单件模式和访问者模式是常见的设计模式,它们都有各自独特的应用场景和优势。...

    java-javaee-软件工程-设计模式

    在IT行业中,设计模式是软件开发中的重要概念,特别是在Java和JavaEE的软件工程实践中。设计模式是经过时间和实践验证的解决常见问题的最佳方案,它为开发者提供了在特定情况下进行设计的通用语言和模板。本篇文章将...

    设计模式--java版.rar

    本资源“设计模式--java版.rar”提供了一种深入理解和应用Java设计模式的方式。 在Java开发中,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory ...

    设计模式--观察者模式java例子

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动的系统或者...

    设计模式--Java语言版本

    在Java这样的面向对象编程语言中,设计模式更是不可或缺的工具,可以帮助开发者构建可扩展、可维护且高效的应用程序。《设计模式——Java语言版本》这本书深入探讨了如何在Java环境下应用这些模式。 在“设计模式--...

Global site tag (gtag.js) - Google Analytics