logo资料库

设计模式之创建型模式实验.docx

第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
资料共23页,剩余部分请下载后查看
实验二 创建型设计模式实验
一、实验目的
二、实验要求
三、实验步骤
3.1 第一题:简单工厂模式实现创建不同几何图形
3.1.1 结构类图
3.1.2 实现代码
3.1.3 模拟测试截图
3.2 第二题:工厂方法模式实现不同网络协议的连接
3.2.1 结构类图
3.2.2 实现代码
3.2.3 模拟测试截图
3.3 第三题:抽象工厂模式实现数据库的连接
3.3.1 结构类图
3.3.2 实现代码
3.3.3 模拟测试截图
3.4 第四题:建造者模式实现赛车的构建
3.4.1 结构类图
3.4.2 实现代码
3.4.3 模拟测试截图
3.5 第五题:原型模式通过浅克隆和深克隆方法实现该简历复制功能
3.5.1 结构类图
3.5.2 实现代码
3.5.3 模拟测试截图
3.6 第六题:单例模式设计虚拟用户生成器,使用饿汉式和双重检测
3.6.1 结构类图
3.6.2 实现代码
3.6.3 模拟测试截图
四、实验体会
实验二 创建型设计模式实验 一、 实验目的 (1)结合实例,熟练绘制创建型设计模式结构图 (2)结合实例,熟练使用Java面向对象编程语言实现创建型设计模式 (3)通过编程实践,理解每一种创建型设计模式的概念和内涵、结构、优缺点 以及应用场景 二、 实验要求 (1)使用简单工厂模式设计一个可以创建不同几何形状( Shape)(例如圆形 ( Circle).、矩形 Rectangle)和三角形( ( Triangle)等的绘图工具类,每个几何图形均 具有绘制方法daw()和擦除方法 erase(),要求在绘制不支持的几何图形时,抛出一 个 UnsupportedShapeException异常。绘制类图并编程模拟实现。 (2)在某网络管理软件中,需要为不同的网络协议提供不同的连接类,例如针对 POP3协议的连接类POP3Connection、针对IMAP协议的连接类 IMAPConnection、 针对HTTP协议的连接类 HTTPConnection等。由于网络连接对象的创建过程较 为复杂,需要将其创建过程封装到专门的类中,该软件还将支持更多类型的网络协 议。现采用工厂方法模式进行设计,绘制类图并编程模拟实现。 (3)某系统为了改进数据库操作的性能,用户可以自定义数据库连接对象 Connection和语句对象 Statement,针对不同类型的数据库提供不同的连接对象和 语句对象,例如提供 Oracle或 MySQL专用连接类和语句类,而且用户可以通过配 置文件等方式根据实际需要动态更换系统数据库。使用抽象工厂模式设计该系统, 绘制对应的类图并编程模拟实现。 (4)在某赛车游戏中,赛车包括方程式赛车、场地野赛车、运动汽车、卡车等类 型,不同类型的赛车的车身、发动机、轮胎、变速箱等部件有所区别。玩家可以 自行选择赛车类型,系统将根据玩家的选择创建出一辆完整的赛车。现采用建造 者模式实现赛车的构建,绘制对应的类图并编程模拟实现 (5)某在线招聘网站中,用户可以创建一个简历模板。针对不同的工作岗位,可以 复制该简历模板并进行适当修改后,生成一份新的简历。在复制简历时,用户可以 选择是否复制简历中的照片:如果选择“是”,则照片将一同被复制,用户对新简历 中的照片进行修改不会影响到简历模板中的照片,对模板进行修改也不会影响到 新简历;如果选择“否”,则直接引用简历模板中的照片,修改简历模板中的照片将 导致新简历中的照片一同修改,反之亦然。现采用原型模式设计该简历复制功能 并提供浅克隆和深克隆两套实现方案,绘制对应的类图并编程模拟实现。
(6)某Web性能测试软件中包含一个虚拟用户生成器( Virtual User Generator)。 为了避免生成的虚拟用户数量不一致,该测试软件在工作时只允许启动唯一一个 虚拟用户生成器。采用单例模式设计该虚拟用户生成器,绘制类图并分别使用饿 汉式单例、双重检测锁等二种方式编程模拟实现。 三、 实验步骤 3.1 第一题:简单工厂模式实现创建不同几何图形 3.1.1 结构类图 3.1.2 实现代码 //接口 interface Shape { public void init(); } //圆形 class ReCircle implements Shape { @Override public void init() { System.out.println("创建圆形"); } } //长方形 class Rectangle implements Shape { @Override public void init() { // TODO Auto-generated method stub System.out.println("创建长方形");
} } //三角形 class Triangle implements Shape { @Override public void init() { // TODO Auto-generated method stub System.out.println("创建三角形"); } } //几何图形工厂 class ShapeFactory { public static Shape intiShape(String name) throws Exception { if (name.equalsIgnoreCase("Circle")) { System.out.println("图形工厂生产圆形"); return new ReCircle(); } else if (name.equalsIgnoreCase("Triangle")) { System.out.println("图形工厂生产三角形"); return new ReCircle(); } else if (name.equalsIgnoreCase("Rectangle")) { System.out.println("图形工厂生产长方形"); return new ReCircle(); } else { throw new Exception("对不起,暂不能生产该图形"); } } public static void deleteShape(String name) throws Exception { if (name.equalsIgnoreCase("Circle")) { System.out.println("已销毁圆形"); } else if (name.equalsIgnoreCase("Triangle")) { System.out.println("已销毁三角形"); } else if (name.equalsIgnoreCase("Rectangle")) { System.out.println("已销毁长方形"); } else { throw new Exception("对不起,工厂没有该图形"); }
} } //实现测试类 public class factoryTest { public static void main(String[] args) { try { Shape shape = ShapeFactory.intiShape("Circle"); shape.init(); shape = ShapeFactory.intiShape("Triangle"); shape.init(); shape = ShapeFactory.intiShape("Rectangle"); shape.init(); shape = ShapeFactory.intiShape("app"); shape.init(); } catch (Exception e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } } } 3.1.3 模拟测试截图 3.2 第二题:工厂方法模式实现不同网络协议的连接
3.2.1 结构类图 3.2.2 实现代码 //连接接口 interface connection { void connect(); } //HTTP 连接类 class HTTPConnection implements connection{ public void connect() { // TODO Auto-generated method stub System.out.println("使用 HTTP 连接类"); } } //IMAP 连接类 class IMAPConnection implements connection{ public void connect() { // TODO Auto-generated method stub System.out.println("使用 IMAP 连接类"); } } //POP3 连接类 class POP3Connection implements connection{ public void connect() { // TODO Auto-generated method stub System.out.println("使用 POP3 连接类"); } } //连接工厂 interface ConnectionFactory {
connection getConnection(); } //HTTP 连接工厂 class HTTPFactory implements ConnectionFactory { @Override public connection getConnection() { // TODO Auto-generated method stub return new HTTPConnection(); } } //IMAP 连接工厂 class IMAPFactory implements ConnectionFactory{ @Override public connection getConnection() { // TODO Auto-generated method stub return new IMAPConnection(); } } //POP3 连接工厂 class POP3Factory implements ConnectionFactory { @Override public connection getConnection() { // TODO Auto-generated method stub return new POP3Connection(); } } //实现测试类 public class MethodTest { public static void main(String[] args) { new POP3Factory(); ConnectionFactory factory =null; //POP3 factory = connection pop3 = factory.getConnection(); pop3.connect(); //IMAP factory = new IMAPFactory(); connection imap = factory.getConnection(); imap.connect();
//HTTP factory = new HTTPFactory(); connection http =factory.getConnection(); http.connect(); } } 3.2.3 模拟测试截图 3.3 第三题:抽象工厂模式实现数据库的连接 3.3.1 结构类图 3.3.2 实现代码 //抽象连接类 abstract class Connection {
abstract void connect(); } //MySql 连接类 class MySqlConnection extends Connection{ @Override void connect() { // TODO Auto-generated method stub System.out.println("MySqlConnection"); } } //Oracle 连接类 class OracleConnection extends Connection { @Override void connect() { // TODO Auto-generated method stub System.out.println("OracleConnection"); } } //SqlServer 连接类 class SqlServerConnection extends Connection { @Override void connect() { // TODO Auto-generated method stub System.out.println("SqlServerConnection"); } } //抽象 Statement 类 abstract class Statement { abstract void operate(); } //MySql Statement 类 class MySqlStatement extends Statement { @Override void operate() { // TODO Auto-generated method stub System.out.println("MySqlStatements"); }
分享到:
收藏