设计模式习题_第1页
设计模式习题_第2页
设计模式习题_第3页
设计模式习题_第4页
设计模式习题_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一,模式的定义战略定义:策略模式定义了一系列算法,并封装了每个算法,以便它们可以相互替换。策略模式允许算法独立于使用它的客户而改变。类图:上下文(适用性):1)需要使用具体策略提供的算法。2)在内部维护一个战略实例。3)负责动态设置运行时策略的具体实现算法。4)负责与战略的互动和数据传输。策略(抽象策略类):定义了一个通用接口。各种算法以不同的方式实现这个接口。上下文使用这个接口来调用不同的算法。通常,接口或抽象类用于实现这个接口。具体战略:实现了策略定义的接口,并提供了具体的算法实现。适用性:对于战略模型,主要有以下适用性:1.多个类别仅在性能行为上有所不同。策略模式可用于动态选择运行时要执行的特定行为。(例如,飞行行为和抖动行为)2.在不同的情况下需要使用不同的策略(算法),或者这些策略将来可能会以其他方式实现。(例如,FlyBehavior和QuackBehavior的具体实现可以任意更改或扩展)3.对客户隐藏特定策略(算法)的实现细节,并且完全相互独立。策略模式序列图:1.观察者模式定义:定义对象之间的一对多依赖关系。当对象的状态改变时,所有依赖于它的对象都会被通知并自动更新。类图:P52解决的主要问题:当一个抽象模型有两个方面时,一个依赖于另一个。当一个对象的改变需要同时改变其他对象时,不知道需要改变多少个对象。当一个对象必须通知其他对象时,它不能假定其他对象是谁。生活中的例子:观察者定义了对象之间的一对多关系。当一个对象的状态改变时,所有依赖它的对象都会被通知并自动更新。拍卖展示了这一模式。每个投标人都有一个标有投标号码的标志。拍卖人开始拍卖时,他观察是否有任何迹象提高了他的出价。每次新的出价被接受,当前的拍卖价格被改变并广播给所有的出价人以进行新的出价。图2使用拍卖示例的观察者模式第一个测试示例:1.观察者模式适用于场景1)要更新一个对象的状态,需要同步更新其他对象,并且其他对象的数量是动态可变的。2)对象只需要通知其他对象它自己的更新,而不知道其他对象的细节。1.类图和时序图(见图1和2)图1。设计类图图2。时间图1.类实现和代码测试1)芝加哥奥皮扎商店类package com.finalcomimport com . final pizza . ChiCagoStyleCheesPizza;import com . final pizza . ChiCagostylePepperoniPizza;导入com . final pizza . pizza;公共类ChicagoPizzaStore扩展PizzaStore公共比萨创建比萨(字符串项目)if(item . equals( cheese )返回新的芝加哥风格的奶酪比萨饼();否则如果(item . equals( pepper oni )返回新的芝加哥风格胡椒比萨();否则返回null2)Nyizzastar类package com.finalcom导入com . final pizza . *;公共类NYPizzaStore扩展了PizzaStore公共比萨创建比萨(字符串项目)if(item . equals( cheese )返回新的NystyleCheesPizza();否则如果(item . equals( pepper oni )返回新的nystylepepperonpizza();否则返回null3)PizzaStore抽象类package com.finalcom导入com . final pizza . *;公共抽象类PizzaStore 公共比萨饼订单比萨饼(字符串类型)比萨饼。比萨=创建比萨(类型);pizza.prepare()pizza . bake();pizza . cut();pizza . box();退回比萨饼;受保护的抽象比萨创建比萨(字符串类型);4)PizzaTestDrive类package com.finalcom导入com . final pizza . *;公共类PizzaTestDrive 公共静态空主要(字符串)参数)比萨店纽约商店=新纽约比萨店();比萨店=新的芝加哥比萨店();比萨饼。pizza=nyStore.orderPizza(奶酪”;系统。出去。println(=);pizza=nyStore.orderPizza(意大利香肠”;系统。出去。println(=);比萨=芝加哥商店。订购比萨(”奶酪”;系统。出去。println(=);pizza=chicagoStore.orderPizza(意大利香肠”;系统。出去。println(=);5)芝加哥风格奶酪比萨类package com.finalpizza公共类芝加哥风格奶酪比萨扩展了比萨饼公共芝加哥风格奶酪比萨饼()设置名称(”芝加哥风格的酱和奶酪比萨饼”;面团(”超薄面团”;沙司(”李子番茄酱”;加入(“10盎司奶酪丝”;公共空白切割()系统输出打印(”将比萨饼切成方形切片”;6)芝加哥风味胡椒比萨类package com.finalpizza公共类芝加哥风味胡椒比萨饼扩展比萨饼公共芝加哥风格胡椒比萨()setName(芝加哥风格酱和意大利香肠披萨”;面团(”超薄面团”;沙司(”李子番茄酱”;加入(“10盎司意大利辣香肠丝”;公共空白切割()系统输出打印(”将比萨饼切成方形切片”;接右上角7)NystyleCheesPizza类package com.finalpizza公共类NYStyleCheesePizza扩展了比萨饼公共NYStyleCheesPizza()设置名称(”纽约风格酱和奶酪比萨饼”;面团(”薄皮面团”;调味酱(”卤汁”;加入(”磨碎的雷吉诺5盎司奶酪”;8)纽约胡椒比萨类package com.finalpizza公共类纽约胡椒比萨扩展了比萨饼公共NYStylePepperoniPizza()设置名称(”纽约风味酱和意大利香肠比萨饼”;面团(”薄皮面团”;调味酱(”卤汁”;加入(”磨碎的5盎司意大利香肠”;9)比萨饼抽象类package com.finalpizza导入java.u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论