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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

设计模式刘伟 实验参考答案.docx

1、设计模式刘伟 实验参考答案 实验参考答案设计模式刘伟 1 实验 中提供了多种矢量图模板,用户可以基于这些矢量图创建不同的API 1在某图形库 显示图形,图形库设计人员设计的初始类图如下所示: Client Triangle RectangleCircle + : voidinit () init () init () : void : void + : void voidvoid setColor () setColor () : setColor (): + voidfill () : void fill () : void fill () : + setSize () setSize ()

2、: void void setSize (): : void + :display () display (): void voiddisplay () : void 方法用于初始化所创建init()等)的 在该图形库中,每个图形类(如 Circle、Triangle 方法用于给图形设置填充颜色,fill()方法用于给图形设置边框颜色,的图形, setColor() 方法用于设置图形的大小,setSize() display()方法用于显示图形。 (Client)在使用该图形库时发现存在如下问题: 客户类由于在创建窗口时每次只需要使用图形库中的一种图形,因此在更换图形时需要 修改客户类源代码;

3、 在图形库中增加并使用新的图形时需要修改客户类源代码; 客户类在每次使用图形对象之前需要先创建图形对象,有些图形的创建过程较为 复杂,导致客户类代码冗长且难以维护。 现需要根据面向对象设计原则对该系统进行重构,要求如下:隔离图形的创建和使用,将图形的创建过程封装在专门的类中,客户类在使用图 形时无须直接创建图形对象,甚至不需要关心具体图形类类名; 客户类能够方便地更换图形或使用新增图形,无须针对具体图形类编程,符合开 闭原则。 绘制重构之后的类图并说明在重构过程中所运用的面向对象设计原则。 参考答案: 、矩形(Shape),如圆形(Circle)2使用简单工厂模式设计一个可以创建不同几何形状和

4、擦除draw()(Triangle)等的绘图工具类,每个几何图形均具有绘制(Rectangle)和三角形 erase()异常,UnsupportedShapeException 两个方法,要求在绘制不支持的几何图形时,抛出一个 绘制类图并编程模拟实现。 参考答案: Shape UnsupportedShapeException +void :draw () (UnsupportedShapeException + +void:erase () String message) TriangleCircleRectangleShapeFactory +voiddraw () draw ()draw

5、 ()void: : void:createShape (String type): Shape+ + voidvoiderase (): voiderase ():erase () 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设3. 格式的图片、GIF 用于读取(GifReader)图片读取器GIF ,如(ImageReader)计一个图片读取器格式的图片。图片读取器对象通过图片读取器工JPG (JpgReader)JPG 图片读取器用于读取 是一个抽象类,用于定义创建图片读来创建,厂 ImageReaderFactory ImageReaderFactory 用于创

6、建具体的图片读取取器的工厂方法,其子类 GifReaderFactory 和 JpgReaderFactory 器对象。试使用工厂方法模式设计该程序,绘制类图并编程模拟实现。需充分考虑系统的 灵活性和可扩展性。 参考答案: ImageReaderImageReaderFactory readImage (): voidcreateImageReader (): ImageReader+ JpgReaderFactory JpgReaderGifReader createImageReader (): ImageReader+ readImage (): void+readImage (): v

7、oid+ GifReaderFactory reatec createImageReader (): ImageReader+ 某软件公司欲开发一套界面皮肤库,可以对桌面软件进行界面美化。不同的皮肤 4. 将提供视觉效果不同的按钮、文本框、组合框等界面元素,其结构如下图所示: 该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮肤,开发人员可以在不修改既有代码的基础上增加新的皮肤。试使用抽象工厂模式设计该皮肤库,绘制类 图并编程模拟实现。 参考答案: 5. 使用单例模式的思想实现多例模式,确保系统中某个类的对象只能存在有限个,例如两个或三个,设计并编写代码实现一个多例类。参考答案:

8、 Multiton - array : Multiton - Multiton () + getInstance () : Multiton : int+ random () 多例模式(Multiton Pattern)是单例模式的一种扩展形式,多例类可以有多个实例,而且必须自行创建和管理实例,并向外界提供自己的实例,可以通过静态集合对象来存储这些实 例。多例类 Multiton 的代码如下所示: import java.util.*; public class Multiton /定义一个数组用于存储四个实例 private static Multiton array = new Multi

9、ton(), new Multiton(), new Multiton(), new Multiton(); /私有构造函数 private Multiton() /静态工厂方法,随机返回数组中的一个实例 public static Multiton getInstance() return arrayrandom(); /随机生成一个整数作为数组下标 public static int random() Date d = new Date(); Random random = new Random(); int value = Math.abs(random.nextInt(); value

10、 = value % 4; return value; public static void main(String args) Multiton m1,m2,m3,m4; m1 = Multiton.getInstance(); m2 = Multiton.getInstance(); m3 = Multiton.getInstance(); m4 = Multiton.getInstance(); System.out.println(m1=m2); System.out.println(m1=m3); System.out.println(m1=m4); 6. 使用单例模式设计一个多文档

11、窗口(注:在 Java AWT/Swing 开发中可使用 JDesktopPane 和 JInternalFrame 来实现),要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体,如下图所示,编程实现该功能。 参考答案:实现类似功能也可以)C+ 或C# (注:用SubFrame- frame: SubFrame- - MainClass JButton:button JDesktopPane: desktopPane SubFrame: iFrame SubFrame ()+ SubFrame: getFrame () MyIFListener ()MainClass +

12、BtListener SubFrame getFrame() 类充当单例类,在其中定义了静态工厂方法。 代码如下所示:import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; /子窗口:单例类 class SubFrame extends JInternalFrame private static SubFrame frame;/静态实例 /私有构造函数 private SubFrame() 畳数?子窗体, true, true, true, false); thi

13、s.setLocation(20,20); /设置内部窗体位置 this.setSize(200,200); /设置内部窗体大小 this.addInternalFrameListener(new MyIFListener();/监听窗体事件 this.setVisible(true); /工厂方法,返回窗体实例 public static SubFrame getFrame() /如果窗体对象为空,则创建窗体,否则直接返回已有窗体 if(frame=null) frame=new SubFrame(); return frame; / 事件监听器 class MyIFListener ext

14、ends InternalFrameAdapter /子窗体关闭时,将窗体对象设为 null public void internalFrameClosing(InternalFrameEvent e) if(frame!=null) frame=null; /客户端测试类 class MainClass extends JFrame private JButton button; private JDesktopPane desktopPane; private SubFrame iFrame=null; public MainClass() 畳数?主窗体); Container c=thi

15、s.getContentPane(); c.setLayout(new BorderLayout(); 畢瑴湯渽睥?畂瑴湯尨点击创建一个内部窗体); button.addActionListener(new BtListener(); c.add(button, BorderLayout.SOUTH); desktopPane = new JDesktopPane(); /创建 DesktopPane c.add(desktopPane); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelative

16、To(null); this.setSize(400,400); this.show(); /事件监听器 class BtListener implements ActionListener public void actionPerformed(ActionEvent e) if(iFrame!=null) desktopPane.remove(iFrame); iFrame=SubFrame.getFrame(); desktopPane.add(iFrame); public static void main(String args) new MainClass(); 静态的类中定义了一

17、个类SubFrame 是 JInternalFrame 类的子类,在 SubFrame 对象并将其返中创建了 SubFrame SubFrame 类型的实例变量,在静态工厂方法 getFrame()类中使用了该单例类,确保子窗口在当前应用程序中只有唯一一个实例,回。在 MainClass 即只能弹出一个子窗口。 2 实验search(int, 和查找方法 现有一个接口 DataOperation 定义了排序方法 sort(int) 1. 的BinarySearch 的 quickSort(int)方法实现了快速排序算法,类 int),已知类 QuickSort 方法实现了二分查找算法。试使用适

18、配器模式设计一个系统,在不修binarySearch(int, int)接口中。DataOperation 和类 BinarySearch 的方法适配到 改源代码的情况下将类 QuickSort 参考答案: 绘制类图并编程实现。(要求实现快速排序和二分查找,使用对象适配器实现) DataOperation Client + intsort (int array): QuickSort +int :search (int array, int key) +:quickSort (int array) int + void:sort (int array, int p, int r) + intp

19、artition (int a, int p, int r): OperationAdapter + voidswap (int a, int i, int j): - QuickSort:sortObj -BinarySearch:searchObj +OperationAdapter (QuickSort sortObj, BinarySearch searchObj) +: intsort (int array) BinarySearch +intsearch (int array, int key): binarySearch (int array, int key): int+ 结构

20、 RealPlayer 和 2.Windows Media Player 是两种常用的媒体播放器,它们的API ,而且在将来可能还API 和调用方法存在区别。现在你的应用程序需要支持这两种播放器 需要支持新的媒体播放器,请问如何设计该应用程序?绘制类图并编程模拟实现。 参考答案: 可使用适配器模式和抽象工厂模式,参考类图如下所示: ClientClass PlayerFactory MainWindow +MainWindow:createMainWindow () +PlayerList:createPlayerList () RealPlayerWindow MediaPlayerWind

21、ow MediaPlayerFactory + MainWindowcreateMainWindow (): + PlayerList:createPlayerList () RealPlayerAPIMediaPlayerAPI RealPlayerFactory + MainWindowcreateMainWindow (): +PlayerList:createPlayerList () PlayerList MediaPlayerList RealPlayerList 在该类图中,为两种不同的播放器提供了两个具体工厂类MediaPlayerFactory 和 播放器工厂,可以 Real

22、PlayerFactory,其中MediaPlayerFactory 作为 Windows Media Player (为和播放列表(MediaPlayerList)Player 的主窗口(MediaPlayerWindow)创建 Windows Media 了简化类图,只列出主窗口和播放列表这两个播放器组成元素,实际情况下包含更多组成元 , 窗RealPlayer 创建的主口素作); RealPlayerFactory 为 RealPlayer 播器放工厂,此时可以使用抽象工厂模式,客户端针对(RealPlayerWindow)和播放列表(RealPlayerList)编程,如果增加新的播放

23、器,只需增加一个新的具体工厂来生产新PlayerFactory 抽象工厂 中的方法,因此还需要使用适配器模式,在API 产品族中的产品即可。由于需要调用现有 中API 调用Media Player Windows MediaPlayerList 具体产品类如MediaPlayerWindow 和 的方法,在 RealPlayerWindow 和 RealPlayerList 中调用 RealPlayer API 中的方法,实现对 API 中方法的适配,此时具体产品如 MediaPlayerWindow、RealPlayerWindow 等充当适配 是需要适配的适配者。RealPlayerAPI

24、 和MediaPlayerAPI 如API 器,而已有的 的框架,该软件既可以对某个文件夹 使用组合模式设计一个杀毒软件(AntiVirus)3.、TextFile(File)进行杀毒,文件种类包括文本文件 (Folder)杀毒,也可以对某个指定的文件 VideoFile。绘制类图并编程模拟实现。图片文件 ImageFile、视频文件 参考答案: AbstractFile bstract a + void:add (AbstractFile file) +void:remove (AbstractFile file) + AbstractFilegetChild (int i): +void:

25、killVirus () fileList FolderVideoFileImageFile - ArrayList:fileListname: String-name: String - String:name+ VideoFile (String name)ImageFile (String name) +Folder (String name) voidadd (AbstractFile file):add (AbstractFile file) void: +voidadd (AbstractFile file) :void: remove (AbstractFile file): v

26、oidremove (AbstractFile file) + void:remove (AbstractFile file)AbstractFilegetChild (int i) getChild (int i): AbstractFile: +AbstractFile getChild (int i): voidkillVirus ()killVirus (): void: +void killVirus (): TextFile name: String- +TextFile (String name) + void:add (AbstractFile file) +voidremov

27、e (AbstractFile file): + AbstractFilegetChild (int i): + void:killVirus () 4.某教育机构组织结构如下图所示: 北京总部 校湖南分行政办公室教务办公室 行政办公室教务办公室长沙教学点湘潭教学点 行政办公室教务办公室教务办公室行政办公室 系统中可以给各级办公室下发公文,试采用组合模式设计该机构 OA 在该教育机构的 的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。 参考答案: 参考类图如下所示: Unit bstract a handleArchives (): void+ Office Institution name: String-list- ArrayList list: + Office (String name)- String name: + void handleArchives ():+ Institution (String name

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

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