《Head First設計模式》閱讀筆記 第十二章

2021-08-30 14:21:58 字數 4158 閱讀 5037

1、復合(complex)模式部分

*模式通常被一起使用,並被組合在同乙個設計解決方案中。

*復合模式在乙個解決方案中結合兩個或多個模式,以解決一般或重**生的問題。

[quote]brain power解答:

---------------------------------------------

介面卡(adapter)模式。

---------------------------------------------

呱呱叫解答:

---------------------------------------------

裝飾者(decorator)模式。

---------------------------------------------[/quote]

sharpen your pencil解答:

---------------------------------------------

public abstract class abstractgoosefactory

public class goosefactory extends abstractgoosefactory

}---------------------------------------------

sharpen your pencil解答:

---------------------------------------------

public class quackcounter implements quackable,observable

public void quack()

public static int getquacks()

public void registerobserver(observer observer)

public void notifyobservers()

}---------------------------------------------

sharpen your public解答:

---------------------------------------------

public class flock implemtns quackable,observable

public void add(quackable quacker)

public void quack()

}public void registerobserver(observer observer)

}public void notifyobservers()

}---------------------------------------------

*使用組合(compose)模式時,需要在安全性和透明性之間折中選擇。

2、mvc模式部分(模型model-檢視view-控制器controller)

*檢視(view):用來呈現模型。檢視通常直接從模型中取得它需要顯示的資料和狀態。

*控制器(controller):取得使用者的輸入並解讀其對模型的含義。

*模型(model):模型持有所有的資料、狀態和程式邏輯。模型沒有注意到檢視和控制器,雖然它提供了操縱和檢索狀態的介面,並傳送狀態改變通知給觀察者。

*不把控制器的**(解讀檢視的輸入並操縱模型)放到模型中的原因有兩個:

[quote]一、會讓模型的**更複雜。模型將具有兩個責任,不但要管理使用者介面,還要處理如何控制模型的邏輯。

二、會造成模型和檢視之間的緊耦合,降低了可復用性。通過模型和檢視之間的解耦,使設計更有彈性和容易擴充套件,能容納改變。[/quote]

*mvc和jsp model 2都屬於復合模式。

3、復合(complex)模式小結

*mvc是復合模式,結合了觀察者模式、策略模式和組合模式。

*模型使用觀察者模式,以便觀察者更新,同時保持兩者之間的解耦。

*控制器是檢視的策略,檢視可以使用不同的控制器實現,得到不同的行為。

*檢視使用組合模式實現使用者介面,使用者介面通常組合了巢狀的元件,像面板、框架和按鈕。

*這些模式寫手合作,把mvc的三層解耦,這樣可以保持設計乾淨又有彈性。

*在mvc模式中,介面卡用來將新的模型適配成已有的模型和控制器。

*model 2是mvc在web上的應用。

*在model 2,控制器實現成servlet,而jsp/html實現檢視。

4、mvc模式例項

/**

* 觀察目標介面

* * @author zangweiren 2010-4-12

* */

public inte***ce observable

/*** 模型介面

* * @author zangweiren 2010-4-12

* */

public inte***ce ball extends observable

/*** 模型實現類

* * @author zangweiren 2010-4-12

* */

public class ballmodel implements ball

@override

public void move()

@override

public void notifyobservers()

}@override

public void registerobserver(observer observer)

@override

public void slowdown()

}@override

public void speedup()

@override

public void stop()

}/**

* 觀察者介面

* * @author zangweiren 2010-4-12

* */

public inte***ce observer

/*** 檢視

* * @author zangweiren 2010-4-12

* */

public class ballview implements observer

private void drawball(int x, int y)

private void initview()

});stop.addactionlistener(new actionlistener()

});speedup.addactionlistener(new actionlistener()

});slowdown.addactionlistener(new actionlistener()

});}

public void setmovebuttonenable(boolean b)

public void setmoving(boolean b)

public void setstopbuttonenable(boolean b)

public void showball()

drawball(x, y);

try

} else

} catch (interruptedexception e) }}

}.start();

}@override

public void speedchanged()

}/**

* 控制器

* * @author zangweiren 2010-4-12

* */

public class ballcontroller

public void move()

public void slowdown()

public void speedup()

public void stop()

}/**

* mvc測試類

* * @author zangweiren 2010-4-12

* */

public class testballview

}

Head First 設計模式(閱讀筆記之一)

剛剛開始看,囉嗦幾句 首先這不是廣告!我是學php的,並且還是剛剛入門的級別,一直想提高自己。所以就在物件上下了些功夫。之前,讀過 深入php物件導向 模式與實踐 第三版 前面的部分講的物件的部分還不錯,後面講的模式與實踐部分看的不是太懂,估計是自己水平有限 這本書看過兩遍,一遍細讀,一遍粗讀,但是...

headfirst設計模式

花了一周多一點的時間看完了headfirst的設計模式。看完之後有一種恍然大悟的感覺,仔細想想有覺得自己好像什麼也看懂。簡單說下對這本書的一點感悟吧,headfirst的書比較通俗易懂,之前看了四人幫的設計模式,看一半就有一種痛不欲生的感覺,自己水平有限,看不懂,也就沒在勉強自己了。對於模式其實簡單...

HeadFirst 設計模式 工廠模式

定義乙個建立物件的介面,由子類決定要例項化的類。工廠方法將類例項推遲到子類。依賴倒置。第一種方式是 class pizzastore public pizza orderpizza string type class pizzafactory pizza pizza null 將pizza這個例項提...