《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 JAVA全书的学习笔记
刚通过了ocwcd310-083 (原名为scwcd310-083), 考试时间为11月1日 2010年,复习时间为两周,分享所有...2,看过一遍书后 看head first 串讲笔记,结合head first 复习笔记,有不懂的再看书 (3 天) 3,看真题 (3天)
HeadFirst设计模式 读书 笔记
笔记_HeadFirst设计模式
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
Head First Servlet & JSP, 经典教程,适用于SCWCD,我就是用这本书98%通过认证。本人注释版,非扫描。
python_head_first笔记.pdf
Head First 设计模式学习笔记。更多内容请参见文章内容。
个人的Head First Servlets & JSP (SCWCD)读书及学习笔记
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 ...
CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记HeadFirst HTML&CSS学习笔记 HeadFirst HTML&CSS学习笔记Head...
Head First设计模式读书笔记-DesignPatterns
Chapter 1: 创建数据库 CREATE DATABASE database_name; 使用数据库 USE database_name; 创建表 CRATE TABLE table_name ( col2 VAR_TYPE, col1 VAR_TYPE NOT NULL DEFAULT xxx, ...还有其它形式的插入数据方式,不...
head_first_servlet&jsp学习笔记
Head First系列都是入门的绝佳好书!这是Head First Ajax的一些读书笔记,读书需要越读越薄,仅供学习。
著名的《Head First Design Pattern》学习笔记,摘要这本书中的设计思路。由于书本过长,整理出笔记帮助回想起设计模式。文件是docx格式,只能由OFFICE Word 2007之后的版本打开,内附Visio类图文件。本文由个人整理...
Android 初级
python_head_first笔记
我的Head First SQL阅读笔记,仅供大家参考。