`

Head First 读书笔记

阅读更多
《Head First》 确实是一本不可多得的关于设计模式的书籍。给我感觉就像是金庸武侠剧笑傲江湖中独孤九剑剑谱一样,针对不同的招式都有相应的破解之法。确实有拿着就不想放下的感觉。 
   看了前面两种设计模式。现在做一下记录,方便以后没有带书的时候复习总结。
    OO基础就是:抽象、封装、继承、多态。 虽然很多人都清楚还是提一下;
    OO原则:封装变化;多用组合,少用继承;针对接口编程,不针对实现编程。
    策略模式:其实就是bean的set方法的一个分支。
    观察者模式:重点说一下,定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有观察者都会收到通知并自动更新。
    贴上一个书本上的例子来看看:
    WeatherData.java

  
    


import java.util.Observable;

/**
 * 
 * 天气预报站发出的数据
 * 继承自java.util的抽象被观察类Observable
 * 
 */
public class WeatherData extends Observable {

	private float temperature;
	
	private float humidity;
	
	private float pressure;
	
	
	
	
	/**
	 * 获得湿度
	 * 
	 */
	public float getHumidity() {
		return humidity;
	}

	/**
	 * 获得气压
	 * @return
	 */
	public float getPressure() {
		return pressure;
	}

	/**
	 * 获得温度
	 * @return
	 */
	public float getTemperature() {
		return temperature;
	}

	/**
	 * 当天气有所改变时调用
	 *
	 */
	public void measurementsChanged() {
		
		setChanged();//设置状态改变的标记
		notifyObservers();//通知观察者
		
	}
	
	public void setMeasurements(float temperature,float humidity,float pressure)
	{
		this.temperature = temperature;
		this.humidity = humidity;
		this.pressure = pressure;
		measurementsChanged();
		
	}

}



DisplayElement.java
/**
 * 
 * 
 * 自定义的显示方法
 *
 */
public interface DisplayElement {

	public void display();
}



CurrentConditionsDisplay.java


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

/**
 * 
 * 观察者类,实现java.util观察者接口Observer
 * 
 * 
 */
public class CurrentConditionsDisplay implements Observer, DisplayElement {

	private float temperature;

	private float pressure;

	private Observable observable;

	CurrentConditionsDisplay(Observable observable) {
		this.observable = observable;
		observable.addObserver(this);//此处记得要注册观察者

	}

	/**
	 * 被观察者调用notifyObservers()后会调用update方法。此方法为Observer接口函数
	 */
	public void update(Observable obs, Object arg) {
		if (obs instanceof Observable) {
			WeatherData weatherData = (WeatherData) obs;
			temperature = weatherData.getTemperature();
			pressure = weatherData.getPressure();
			display();
		}

	}

	public void display() {
		System.out.println("温度为:"+temperature+" 气压为:"+pressure); 
	}

}





Test.java 自己测试一下吧。
public class Test {
	public static void main(String[] args) {
		WeatherData data = new WeatherData();
		
		CurrentConditionsDisplay conditionsDisplay = new CurrentConditionsDisplay(data);
		data.setMeasurements(80, 65, 30);
		
		
	}
}


总结一下要点:
观察者模式定义了对象之间一对多的关系;
可观察者用一个共同的接口来更新观察者;
使用java.util包的被观察者抽象类observable和观察者的接口observer。需要注意的是:1.被观察者notifyObservers()之前要调用setChanged(),notifyObservers()不带参数称为"拉"。2.notifyObservers(Object)如果带参数则可以将参数传到观察者中的update(Observable obs, Object arg)的第二个参数,这样方式被形象的称为"推"。
分享到:
评论

相关推荐

    Head First Android Development 读书笔记

    Head First Android Development 读书笔记

    scwcd (ocwcd)310-083 真题+head first 串讲笔记+head first 复习笔记

    刚通过了ocwcd310-083 (原名为scwcd310-083), 考试时间为11月1日 2010年,复习时间为两周,分享所有...2,看过一遍书后 看head first 串讲笔记,结合head first 复习笔记,有不懂的再看书 (3 天) 3,看真题 (3天)

    HeadFirst设计模式读书笔记

    HeadFirst设计模式 读书 笔记

    Head First Servlet & JSP

    《Head First Servlet & JSP》是一本非常受欢迎的IT教程,专为准备SCWCD(Sun Certified Web Component Developer)认证的读者设计。本书以其独特的学习风格,深入浅出地介绍了Servlet和JSP(JavaServer Pages)这两...

    笔记_HeadFirst设计模式.pdf

    笔记_HeadFirst设计模式

    Head First SQL笔记

    ### Head First SQL 笔记概览 #### 第一章 创建与管理数据库 - **创建数据库** 使用 `CREATE DATABASE` 语句可以创建一个新的数据库。语法格式如下: ```sql CREATE DATABASE database_name; ``` - **使用...

    Head First HTML&CSS 学习笔记.zip

    CSS 学习笔记Head First HTML&CSS 学习笔记 Head First HTML&CSS 学习笔记Head First HTML&CSS 学习笔记 Head First HTML&CSS 学习笔记Head First HTML&CSS 学习笔记 Head First HTML&CSS ...

    HeadFirst HTML&CSS学习笔记.zip

    CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记Head...

    HeadFirst设计模式学习笔记

    《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...

    Head First Servlets & JSP 学习笔记

    《Head First Servlets & JSP》是一本广受欢迎的教材,它深入浅出地讲解了这些概念,帮助开发者通过SCWCD(Sun Certified Web Component Developer)认证。以下是一些关键知识点的详细解释: 1. **Servlet**: - *...

    Head First Design Pattern 学习笔记

    著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...

    HeadFirst 设计模式学习笔记1--策略模式Demo

    《HeadFirst设计模式学习笔记1--策略模式Demo》 在软件工程中,设计模式是一种解决常见问题的标准方案,它提供了一种在特定情况下组织代码的模板。策略模式是设计模式中的一种行为模式,它允许在运行时选择算法或...

    Head First Android Development 读书笔记 Chapter 6-10

    Android 初级

    head_first_servlet&jsp学习笔记

    【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。

    《Head First设计模式》读书笔记 -- (第一章)策略模式

    《Head First设计模式》是软件开发领域的一本经典著作,其深入浅出地介绍了23种设计模式。第一章主要讲解的是策略模式,这是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式的核心思想是定义一系列算法...

    读书笔记:设计模式学习笔记和代码。《图解设计模式》《Head First 设计模式》.zip

    读书笔记:设计模式学习笔记和代码。《图解设计模式》《Head First 设计模式》

    HeadFirst 设计模式学习笔记3--装饰模式 Demo

    在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”中,作者通过实例讲解了装饰模式的基本概念、结构和应用场景。这篇文章可能是从CSDN博客平台上的一个链接访问的,遗憾的是,由于我们当前无法直接访问该链接,所以...

    python_head_first笔记.pdf

    Python 编程基础知识点 Python 是一种通用的编程语言,具有 statements、expressions、operators、functions、modules、methods 和 classes 等特性。下面将详细介绍 Python 的一些基本知识点。...

Global site tag (gtag.js) - Google Analytics