2007年5月26日 星期六

深入淺出設計模式_part2(觀察者模式)



觀察者模式
定義了物件的一對多關係,如此一來當一個物件改變狀態,其他相依者都會收到通知並自動更新。

設計守則:設計盡量讓需要互動的物件之間關係鬆綁。

EX:利用java.util.Observable & java.util.Observer來實踐觀察者模式

package headfirst.observer.weatherobservable;

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

//WeatherData為一個主題(被觀察者)
public class WeatherData extends Observable {
//需要改變的三個有關於天氣的參數
private float temperature;
private float humidity;
private float pressure;

public WeatherData() { }

//自訂的方法,用來改變觀察者的天氣參數
public void measurementsChanged() {
//設定旗標,可增加更新觀察者的彈性,可設定多次才更新或到一定值才更新,此方法繼承 自Observable類別
setChanged();
/**
setChanged(){
changed=true;
}
**/
//在旗標設定為true時通知觀察者,此方法繼承自Observable類別
notifyObservers();
/**
notifyObservers(Object org){
if(change){
for every observer on the list{
call update(this,org);
}
}
}

**/
}

public void setMeasurements(float temperature, float humidity, float pressure) {
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();
}

public float getTemperature() {
return temperature;
}

public float getHumidity() {
return humidity;
}

public float getPressure() {
return pressure;
}
}


package headfirst.observer.weatherobservable;

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

//觀察者,實做Observer介面及一個自訂的顯示介面DisplayElement
public class CurrentConditionsDisplay implements Observer, DisplayElement {
Observable observable;
private float temperature;
private float humidity;

//將自己新增為一個觀察者
public CurrentConditionsDisplay(Observable observable) {
this.observable = observable;
observable.addObserver(this);
}

//接受通知,改變自己的狀態並顯示
public void update(Observable obs, Object arg) {
if (obs instanceof WeatherData) {
WeatherData weatherData = (WeatherData)obs;
this.temperature = weatherData.getTemperature();
this.humidity = weatherData.getHumidity();
display();
}
}

//實踐自訂的顯示介面
public void display() {
System.out.println("Current conditions: " + temperature
+ "F degrees and " + humidity + "% humidity");
}
}

2007年5月13日 星期日

深入淺出設計模式_part1(策略模式)


ch1.策略模式
設計守則:找出程式中可能需要更動之處,把她 們獨立出來,不要和那些不需更動的 程式混在一 起。

設計守則:寫程式是針對介面而寫,而不是針對 實踐方式而寫。
EX:由行為類別實踐行為介面,而不是由Duck類別實踐行為介面。

設計守則:多用合成,少用繼承。






2007年5月6日 星期日

基金理財的六堂課

最近讀了這本在台灣基金理財的經典書,覺得真的寫的很好,書中一開始介紹投資基金需要了解的一般知識,如投資和風險的基本概念,簡介各種不同的共同基金。後半段提供許多有關基金評比的資訊,以及如何建構自己的投資組合,整理了很多關於基金投資的數據資料,不虧是財務金融專長的教授,提共的建言都有理論及數據支持,是以長期理財的觀點來看投資,不像一般的投資理財書,多為預測,較為短期。
我覺得基金投資有以下幾個重點:
1.慎選好的基金經理人,這點書中有提供一般的4433法則等建言。
2.投資基金主要是分散風險,要看的是一個趨勢並搭配資產配置,並非賺短期兩三個月的價差,故長期風險的控制是很重要的,書中對於時間的分散風險(定期定額投資)及空間的分散風險(不同類型的基金互相搭配)都有解說。再來不同年齡的資產配置也都有範例說明,教導如何作好的資產配置。
總言之,本書對於一般的基金投資人真的是不可多得的入門書,對於長期的基金理財很有幫助。

名言佳句:
1.大多數人屬於風險規避者,因此高風險投資必需較低風險投資提共更高的預期報酬。
2.明明只要做分散投資的動作就可以消除的風險是笨風險(非系統風險),笨風險是沒有風險溢酬的。