ImageVerifierCode 换一换
格式:DOCX , 页数:43 ,大小:48.29KB ,
资源ID:13782811      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13782811.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(设计模式习题.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

设计模式习题.docx

1、设计模式习题一、 模式(Pattern)定义 策略模式(Strategy) 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。类图: Context(适用性): 1) 需要使用ConcreteStrategy提供的算法。2) 内部维护一个Strategy的实例。3) 负责动态设置运行时Strategy具体的实现算法。4) 负责跟Strategy之间的交互和数据传递。Strategy(抽象策略类): 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象

2、类实现。ConcreteStrategy(具体策略类): 实现了Strategy定义的接口,提供具体的算法实现。适用性: 对于Strategy模式来说,主要有这些适用性: 1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。(例如FlyBehavior和QuackBehavior)2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充)3、 对客户(Duck)隐藏具体策略(算法)的实现细节,彼此完全独立。策略模式顺序图: 1.观察者模式(

3、Observer Pattern) 定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。类图:P52主要解决问题: l 当一个抽象模型有两个方面的,其中一个方面依赖与另一个方面。l 当一个对象的改变需要同时改变其他对象,而不知道具体有多对象有待改变l 当一个对象必须通知其他对象,而它又不能假定其他对象是谁。生活中的例子: 观察者定义了对象间一对多的关系,当一个对象的状态变化时,所有依赖它的对象都得到通知并且自动地更新。拍卖演示了这种模式。每个投标人都有一个标有数字的牌子用于出价。拍卖师开始拍卖时,他观察是否有牌子举起出价。每次接受一个

4、新的出价都改变了拍卖的当前价格,并且广播给所有的投标人进行新的出价。图2 使用拍卖例子的观察者模式第一次试验实例: 1.观察者模式适用场景 1) 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。2) 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。1.类图及时序图(见图1、图2) 图1.设计类图图2.时序图1.类的实现及代码测试 1)ChicagoPizzaStore类package com.finalcom;import com.finalpizza.ChicagoStyleCheesePizza;import com.finalpizza.Chica

5、goStylePepperoniPizza;import com.finalpizza.Pizza;public class ChicagoPizzaStore extends PizzaStore public Pizza createPizza(String item) if(item.equals(cheese) return new ChicagoStyleCheesePizza(); else if(item.equals(pepperoni) return new ChicagoStylePepperoniPizza(); else return null; 2)NYPizzaSt

6、ore类package com.finalcom;import com.finalpizza.*;public class NYPizzaStore extends PizzaStore public Pizza createPizza(String item) if(item.equals(cheese) return new NYStyleCheesePizza(); else if(item.equals(pepperoni) return new NYStylePepperoniPizza(); else return null; 3)PizzaStore抽象类package com.

7、finalcom;import com.finalpizza.*;public abstract class PizzaStore public Pizza orderPizza(String type) Pizza pizza; pizza=createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; protected abstract Pizza createPizza(String type);4)PizzaTestDrive类package com.finalcom;

8、import com.finalpizza.*;public class PizzaTestDrive public static void main(String args) PizzaStore nyStore=new NYPizzaStore(); PizzaStore chicagoStore=new ChicagoPizzaStore(); Pizza pizza; pizza=nyStore.orderPizza(cheese);System.out.println(=); pizza=nyStore.orderPizza(pepperoni); System.out.printl

9、n(=); pizza=chicagoStore.orderPizza(cheese); System.out.println(=); pizza=chicagoStore.orderPizza(pepperoni); System.out.println(=); 5)ChicagoStyleCheesePizza类package com.finalpizza;public class ChicagoStyleCheesePizza extends Pizza public ChicagoStyleCheesePizza() setName(Chicago Style Sauce and Ch

10、eese Pizza); setDough(Extra Thin Crust Dough); setSauce(Plum Tomato Sauce); toppings.add(Shredded Mozzarella 10 ounce cheese); public void cut() System.out.println(Cutting the pizza into square slices); 6)ChicagoStylePepperoniPizza类package com.finalpizza;public class ChicagoStylePepperoniPizza exten

11、ds Pizza public ChicagoStylePepperoniPizza() setName(Chicago Style Sauce and Pepperoni Pizza); setDough(Extra Thin Crust Dough); setSauce(Plum Tomato Sauce); toppings.add(Shredded Mozzarella 10 ounce pepperoni); public void cut() System.out.println(Cutting the pizza into square slices); 接右上角7)NYStyl

12、eCheesePizza类package com.finalpizza;public class NYStyleCheesePizza extends Pizza public NYStyleCheesePizza() setName(NY Style Sauce and Cheese Pizza); setDough(Thin Crust Dough); setSauce(Marinara Sauce); toppings.add(Grated Reggiano 5 ounce cheese); 8)NYStylePepperoniPizza类package com.finalpizza;p

13、ublic class NYStylePepperoniPizza extends Pizza public NYStylePepperoniPizza() setName(NY Style Sauce and Pepperoni Pizza); setDough(Thin Crust Dough); setSauce(Marinara Sauce); toppings.add(Grated Reggiano 5 ounce pepperoni); 9)Pizza抽象类package com.finalpizza;import java.util.ArrayList;public abstra

14、ct class Pizza private String name; private String dough; private String sauce; ArrayList toppings=new ArrayList(); public void prepare() System.out.println(Preparing +name); System.out.println(Tossing dough. ); System.out.println(Adding sauce); System.out.print(Adding toppings: ); for(int i=0;itopp

15、ings.size();i+) System.out.println(+toppings.get(i); public void bake() System.out.println(Bake for 25 minutes at 350); public void cut() System.out.println(Cutting the pizza into diagonal slices); public void box() System.out.println(Place pizza in official PizzaStore box); public String getName()

16、return name; public void setName(String name) this.name = name; public String getDough() return dough; public void setDough(String dough) this.dough = dough; public String getSauce() return sauce; public void setSauce(String sauce) this.sauce = sauce; public ArrayList getToppings() return toppings;

17、public void setToppings(ArrayList toppings) this.toppings = toppings;1.2. 装饰模式(DECORATOR) 定义:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比集成更加有弹性的替代方案。类图:P91 生活中的例子: 装饰模式动态地给一个对象添加额外的职责。不论一幅画有没有画框都可以挂在墙上,但是通常都是有画框的,并且实际上是画框被挂在墙上。在挂在墙上之前,画可以被蒙上玻璃,装到框子里;这时画、玻璃和画框形成了一个物体。图2 使用有画框的画作为例子的装饰模式对象图主要解决问题 l 在不影响其他对象的情况下,以动态、透

18、明的方式给单个对象添加责任l 处理那些可以撤销的职责l 当不能采用生成子类的方法进行扩时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。适用性: 1.需要扩展一个类的功能,或给一个类增加附加责任。2.需要动态地给一个对象增加功能,这些功能可以再动态地撤销。3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。1.3. 工厂方法模式(Factory Method)【P117去理解简单工厂模式,这里不列举】 定义:创建对象的接口,但由子类决定要实例化的类是哪一

19、个。工厂方法让类把实例化推迟到子类。类图:P134 第二次试验实例: 工厂模式的类图及其代码(如图4)图4.工厂模式的类图代码实现:1)ChicagoPizzaStore类package com.finalcom;import com.finalpizza.ChicagoStyleCheesePizza;import com.finalpizza.Pizza;public class ChicagoPizzaStore extends PizzaStore public Pizza createPizza(String item) if(item.equals(cheese) return n

20、ew ChicagoStyleCheesePizza(); 3)PizzaStore抽象类package com.finalcom;import com.finalpizza.*;public abstract class PizzaStore public Pizza orderPizza(String type) Pizza pizza; pizza=createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; protected abstract Pizza create

21、Pizza(String type);4)PizzaTestDrive类package com.finalcom;import com.finalpizza.*;public class PizzaTestDrive public static void main(String args) PizzaStore chicagoStore=new ChicagoPizzaStore(); Pizza pizza; pizza=chicagoStore.orderPizza(cheese); System.out.println(=); 5)ChicagoStyleCheesePizza类pack

22、age com.finalpizza;public class ChicagoStyleCheesePizza extends Pizza public ChicagoStyleCheesePizza() setName(Chicago Style Sauce and Cheese Pizza); public void cut() System.out.println(Cutting the pizza into square slices); 9)Pizza抽象类package com.finalpizza;public abstract class Pizza private Strin

23、g name; public void prepare() System.out.println(Preparing +name); public void bake() System.out.println(Bake for 25 minutes at 350); public void cut() System.out.println(Cutting the pizza into diagonal slices); public void box() System.out.println(Place pizza in official PizzaStore box); public Str

24、ing getName() return name; public void setName(String name) this.name = name; 生活中的例子: 工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。压注成型演示了这种模式。塑料玩具制造商加工塑料粉,将塑料注入到希望形状的模具中。玩具的类别(车,人物等等)是由模具决定的。适用性: 在以下情况下,适用于工厂方法模式:1.当一个类不知道它所必须创建的对象的类的时候。2.当一个类希望由它的子类来指定它所创建的对象的时候。3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息

25、局部化的时候1.4. 抽象工厂方法(Abstract Factory) 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 类图:P156 代码实现:第二次实验课:抽象工厂的类图及其代码(如图7)图7.抽象工厂的类图代码实现:(简化部分)1)NYPizzaStore类package com.abcom;import com.abpizzamaterial.CheesePizza;import com.abpizzamaterial.Pizza;public class NYPizzaStore extends PizzaStore protected Pizza createPizza(String item) Pizza pizza = null; PizzaIngredientFactory ingredientFactory = new NYPizzaIngredientFactory(); if(item.equals(cheese) pizza = new CheesePizza(ingredientFactory); pizza.setName(New York Style Cheese Pizza); return pizza; 2)PizzaIngtedientFactory接口package com.abc

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2