设计模式习题Word文档下载推荐.doc

上传人:b****2 文档编号:14629625 上传时间:2022-10-23 格式:DOC 页数:43 大小:290.13KB
下载 相关 举报
设计模式习题Word文档下载推荐.doc_第1页
第1页 / 共43页
设计模式习题Word文档下载推荐.doc_第2页
第2页 / 共43页
设计模式习题Word文档下载推荐.doc_第3页
第3页 / 共43页
设计模式习题Word文档下载推荐.doc_第4页
第4页 / 共43页
设计模式习题Word文档下载推荐.doc_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

设计模式习题Word文档下载推荐.doc

《设计模式习题Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《设计模式习题Word文档下载推荐.doc(43页珍藏版)》请在冰豆网上搜索。

设计模式习题Word文档下载推荐.doc

内部维护一个Strategy的实例。

3) 

负责动态设置运行时Strategy具体的实现算法。

4) 

负责跟Strategy之间的交互和数据传递。

Strategy(抽象策略类):

定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。

ConcreteStrategy(具体策略类):

实现了Strategy定义的接口,提供具体的算法实现。

适用性:

对于Strategy模式来说,主要有这些适用性:

1、 

多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

(例如FlyBehavior和QuackBehavior)

2、 

需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充)

3、 

对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立。

策略模式顺序图:

1.观察者模式(ObserverPattern) 

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

P52 

主要解决问题:

当一个抽象模型有两个方面的,其中一个方面依赖与另一个方面。

当一个对象的改变需要同时改变其他对象,而不知道具体有多对象有待改变

当一个对象必须通知其他对象,而它又不能假定其他对象是谁。

生活中的例子:

观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。

拍卖演示了这种模式。

每个投标人都有一个标有数字的牌子用于出价。

拍卖师开始拍卖时,他观察是否有牌子举起出价。

每次接受一个新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。

图2使用拍卖例子的观察者模式

第一次试验实例:

1.观察者模式适用场景

对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。

对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

1.类图及时序图(见图1、图2)

图1.设计类图

图2.时序图

1.类的实现及代码测试

1)ChicagoPizzaStore类

packagecom.finalcom;

importcom.finalpizza.ChicagoStyleCheesePizza;

importcom.finalpizza.ChicagoStylePepperoniPizza;

importcom.finalpizza.Pizza;

publicclassChicagoPizzaStoreextendsPizzaStore{

publicPizzacreatePizza(Stringitem){

if(item.equals("

cheese"

)){

returnnewChicagoStyleCheesePizza();

}elseif(item.equals("

pepperoni"

returnnewChicagoStylePepperoniPizza();

}elsereturnnull;

}

}

2)NYPizzaStore类

importcom.finalpizza.*;

publicclassNYPizzaStoreextendsPizzaStore{

returnnewNYStyleCheesePizza();

returnnewNYStylePepperoniPizza();

3)PizzaStore抽象类

publicabstractclassPizzaStore{

publicPizzaorderPizza(Stringtype){

Pizzapizza;

pizza=createPizza(type);

pizza.prepare();

pizza.bake();

pizza.cut();

pizza.box();

returnpizza;

protectedabstractPizzacreatePizza(Stringtype);

4)PizzaTestDrive类

publicclassPizzaTestDrive{

publicstaticvoidmain(String[]args){

PizzaStorenyStore=newNYPizzaStore();

PizzaStorechicagoStore=newChicagoPizzaStore();

pizza=nyStore.orderPizza("

);

System.out.println("

======================"

System.out.println("

pizza=chicagoStore.orderPizza("

5)ChicagoStyleCheesePizza类

packagecom.finalpizza;

publicclassChicagoStyleCheesePizzaextendsPizza{

publicChicagoStyleCheesePizza(){

setName("

ChicagoStyleSauceandCheesePizza"

setDough("

ExtraThinCrustDough"

setSauce("

PlumTomatoSauce"

toppings.add("

ShreddedMozzarella10ouncecheese"

publicvoidcut(){

Cuttingthepizzaintosquareslices"

6)ChicagoStylePepperoniPizza类

publicclassChicagoStylePepperoniPizzaextendsPizza{

publicChicagoStylePepperoniPizza(){

ChicagoStyleSauceandPepperoniPizza"

ShreddedMozzarella10ouncepepperoni"

 

接右上角

7)NYStyleCheesePizza类

publicclassNYStyleCheesePizzaextendsPizza{

publicNYStyleCheesePizza(){

NYStyleSauceandCheesePizza"

ThinCrustDough"

MarinaraSauce"

GratedReggiano5ouncecheese"

8)NYStylePepperoniPizza类

publicclassNYStylePepperoniPizzaextendsPizza{

publicNYStylePepperoniPizza(){

NYStyleSauceandPepperoniPizza"

GratedReggiano5ouncepepperoni"

9)Pizza抽象类

importjava.util.ArrayL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1