软件设计实验二 创建型设计模式实验

一、实验目的

9.结合实例,熟练绘制常见的创建型设计模式结构图。
10.结合实例,熟练使用任意一种面向对象编程语言实现常见的创建型设计模式。
11.通过本实验,理解每一种创建型设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些设计模式。

二、实验内容

1.使用简单工厂模式设计一个可以创建不同几何形状(Shape),如圆形(Circle)、矩形
(Rectangle)和三角形(Triangle)等的绘图工具类,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException 异常,绘制类图并编程模拟实现。
2.用Java代码实现教材中“日志记录器”实例,如果在系统中增加一个日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码。
3. 计算机包含内存(RAM)、CPU等硬件设备,根据下图所示的“产品等级结构-产品族”示意图,使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。
在这里插入图片描述

4.使用单例模式设计一个多文档窗口(注:在 Java AWT/Swing 开发中可使用
JDesktopPane 和 JInternalFrame 来实现),要求在主窗体中某个内部子窗体只能实例化一次,即只能弹出一个相同的子窗体,如下图所示,编程实现该功能。
在这里插入图片描述

5.某软件公司欲开发一套界面皮肤库,可以对桌面软件进行界面美化。不同的皮肤将提供视觉效果不同的按钮、文本框、组合框等界面元素,其结构如下图所示:
在这里插入图片描述

该皮肤库需要具备良好的灵活性和可扩展性,用户可以自由选择不同的皮肤,开发人员可以在不修改既有代码的基础上增加新的皮肤。试使用抽象工厂模式设计该皮肤库,绘制类图并编程模拟实现。
6.在某网络管理软件中,需要不同的网络协议提供不同的连接类,例如针对POP3协议的连接类POP3Connection、针对IMAP协议的连接类IMAPConnection、针对HTTP协议的连接类HTTPConnection等。由于网络连接对象的创建过程较为复杂,需要将其创建过程封装到专门的类中,该软件还将支持更多类型的网络协议。现采用工厂方法模式进行设计,绘制类图并编程模拟实现。
7. 某系统为了改进数据库操作的性能,用户可以自定义数据库连接对象Connection和语句对象Statement,针对不同类型的数据库提供不同的连接对象和语句对象,如提供Oracle或MySQL专用连接类和语句类,而且用户可以通过配置文件等方式根据实际需要动态更换系统数据库。使用抽象工厂模式设计该系统,绘制对应的类图并编程模拟实现。

三、实验要求

  1. 结合实例,绘制常见创建型设计模式的结构图;
  2. 使用任意一种面向对象编程语言实现常见创建型设计模式实例,代码运行正确。
    四、实验步骤
  3. 结合实例,绘制简单工厂模式实例结构图并用面向对象编程语言实现该模式实例;
  4. 结合实例,绘制工厂方法模式实例结构图并用面向对象编程语言实现该模式实例;
  5. 结合实例,绘制抽象工厂模式实例结构图并用面向对象编程语言实现该模式实例;
  6. 结合实例,绘制单例模式实例结构图并用面向对象编程语言实现该模式实例;
  7. 结合实例,绘制抽象工厂模式实例结构图并用面向对象编程语言实现该模式实例;
  8. 结合实例,绘制工厂方法模式实例结构图并用面向对象编程语言实现该模式实例;
  9. 结合实例,绘制抽象工厂模式实例结构图并用面向对象编程语言实现该模式实例。
    五、实验结果
  10. 需要提供简单工厂模式实例的结构图(类图)和实现代码。
    (1)类图实现:
    在这里插入图片描述

(2)代码实现
//工厂类:
class ShapeFactory{
public static Shape createShape(String type) throws UnsupportedShapeException{
if(type.equalsIgnoreCase(“Circle”)) return new Circle();
else if(type.equalsIgnoreCase(“Rectangle”)) return new Rectangle();
else if(type.equalsIgnoreCase(“Triangle”)) return new Triangle();
else throw new UnsupportedShapeException(“不支持该形状!”);
} }
//抽象产品类
public interface Shape{ public void draw(); public void erase(); }
//具体产品类:Circle/Triangle/Rectangle
public class Circle/Triangle/Rectangle implements Shape{
public void draw(){ System.out.println(“绘制圆形/三角形/矩形”); }
public void erase(){ System.out.println(“删除圆形/三角形/矩形”); } }
//自定义异常类
class UnsupportedShapeException extends Exception{
public UnsupportedShapeException(String message){
super(message); } }
//客户端测试类

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值