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這個例項提...