《软件开发生命周期及建模-实验报告单例模式-工厂模式》

上传人:tang****xu1 文档编号:160813758 上传时间:2021-01-12 格式:DOCX 页数:12 大小:20.18KB
返回 下载 相关 举报
《软件开发生命周期及建模-实验报告单例模式-工厂模式》_第1页
第1页 / 共12页
《软件开发生命周期及建模-实验报告单例模式-工厂模式》_第2页
第2页 / 共12页
《软件开发生命周期及建模-实验报告单例模式-工厂模式》_第3页
第3页 / 共12页
《软件开发生命周期及建模-实验报告单例模式-工厂模式》_第4页
第4页 / 共12页
《软件开发生命周期及建模-实验报告单例模式-工厂模式》_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《《软件开发生命周期及建模-实验报告单例模式-工厂模式》》由会员分享,可在线阅读,更多相关《《软件开发生命周期及建模-实验报告单例模式-工厂模式》(12页珍藏版)》请在金锄头文库上搜索。

1、附:实验报告格式信息与管理科学学院计算机科学系实验报告课程名称:软件开发生命周期与建模实验名称:【实验1】工厂方法模式(日志记录器)姓 名: 杨现阳:张泽浩、张金庚:张俊超、杨波 王秋波组号:3 班级:1锲计应四班 实 验 室: 兰亭机房2指导教师:张浩 日期:2016年05月18日一、实验目的工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(VirtualConstructor) 模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。通过 工厂方法模式中,工厂父类负责定义创建产品对象的公共接口、工厂子类负责生成具体的 产

2、品对象,使得产品类的实例化操作延迟到工厂子类中完成。通过工厂方法模式实验,理解掌握工厂方法模式是如何超越简单工厂模式、如何符合 “开闭原则”,使得系统具有更强的扩展性和可维护性。二、实验环境一台 PC 机,所需软件 Win7/10、UML工具(Rose/Visio/EclipseUML/ StartUML/ )、 Eclipse/MyEclipse 、JDK6.0 等。三、实验内容日志记录器系统:某系统日志记录器要求支持多种日志记录方式,如文件记录、数据 库记录等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。四、实验操作过程1. 分析得出日志记录器系统的具体工厂类和具

3、体产品类 工厂:日志记录器工厂public class DatabaseLogFactory extends LogFactory public Log createLog() return new DatabaseLog();public class FileLogFactory extends LogFactory public Log createLog() return new FileLog();文件记录方式!”,”14计应四班第三组,1);数据库记录方式!”,”14计应四班第三组”,1);广品:日志记录方式import javax.swing.JOptionPane;public

4、class FileLog extends Log ( public void writeLog() (JOptionPane.showMessageDialog(null, 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波 import javax.swing.JOptionPane;public class DatabaseLog extends Log ( public void writeLog() (JOptionPane.showMessageDialog(null, 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波2. 分别对日志记录器系统的产品类和工厂类进行抽象抽象工厂:LogFact

5、orypublic abstract class LogFactory (public abstract Log createLog();抽象产品:Logpublic abstract class Log (public abstract void writeLog();Q Log令 writetagQ4.画出日志记录器系统的产品类的结构图AbstractFactory为抽象工厂,ConcreteFactoryl为具体工厂 1, ConcreteFactory2为具体工厂2。AbstractProduct为抽象产品,ConcreteProductl为具体产品 1, ConcreteProduc

6、t2为具体产品2。五、核心代码与实验结果核心代码:import javax.swing.JOptionPane;public class Client public static void main(String口 args) Log log;LogFactory logf;String tvfname=JOptionPane. showInputDialog (子工厂类名);try (Class c=Class. forName(tvfname);logf=(LogFactory)c.newInstance();log=logf.createLog();log.writeLog(); cat

7、ch (ClassNotFoundException e) ( e.printStackTrace(); catch (InstantiationException e) ( e.printStackTrace(); catch (IllegalAccessException e) ( e.printStackTrace();六、心得体会问题基本解决,在软件设计中经常面临着 “某个对象”的创建工作,由丁需 求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳 定的接口。如果我们 使用简单工厂,这样会不断地修改工厂类,应对业务变化, 违反开闭原则,另外因为实例化产品的判断逻辑在工

8、厂类中,工厂类会变的越 来与臃肿。工厂方法模式乂称为工厂模式,也叫虚拟构造器( Virtual Constructor )模式或者多态工厂模式(Polymorphic Factory ),定义一个用户 创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例 化延迟到其子类。增加了系统的灵活性和扩展性。七、组内打分组号姓名学号班级作业成绩(百分制)3杨现阳1410208124计应四班90张泽浩1410208127计应四班90张金庚1410208125计应四班80张俊超1410208126计应四班80杨波1410208123计应四班80王秋波1410208122计应四班80八、指导教

9、师评分成绩: (百分制)指导教师:张 浩注:纸质版实验报告编辑后打印,以组为单位交给学习委员,以班为单位交给老师信息与管理科学学院计算机科学系实验报告课程名称:软件开发生命周期与建模实验名称:【实验2】单例模式(身份证号申请)姓 名: 杨现阳:张泽浩、张金庚:张俊超、杨波 王秋波组号:皂班级:1锻计应四班实验室: 兰亭机房2指导教师:张浩 日 期:2016年05月18日一、实验目的单例模式(Singleton Pattern)确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例, 这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行

10、创建这个实例;三是它必须自行向整个系统 提供这个实例。通过单例模式实验,理解掌握单例模式是如何创建唯一实例、如何判断是唯一实例、 如何通过公共接口对外提供单一实例。二、实验环境一台 PC机,所需软件 Win2003/XP、UMLX具(Rose/Visio/EclipseUML/ StartUML/ )、 Eclipse/MyEclipse 、JDK6.0 等。三、实验内容身份证号码系统:在现实生活中,居民身份证号码具有唯一性,同一个人不允许有多 个身份证号码,第一次申请身份证时将给居民分配一个身份证号码,如果之后因为遗失等 原因补办时,还是使用原来的身份证号码,不会产生新的号码。现使用单例模式

11、模拟该场 景。四、实验操作过程1 .分析身份证号码系统是如何保证在外部不能进行类的实例化身份证号码类拥有一个私有构造函数,确保用户无法通过 new关键字直接实例化它。2.分析身份证号码系统是如何在类内部自行创建该实例身份证号码类中包含一个静态私有被实例化的成员变量instance ,以确保只有一个实例被创建。3 .分析身份证号码系统是如何对外部(向整个系统)提供该实例身份证号码类中包含一个静态公有的工厂方法getInstance (),该工厂方法负责返回实例化的成员变量instance ,以确保只有一个实例被创建。4.画出身份证号码系统的总体类图代码:public class Identity

12、CardNo private static IdentityCardNo instance = new IdentityCardNo();public String no;private IdentityCardNo() (public static IdentityCardNo getInstance ()( return instance;public String getNo() (return no;public void setNo(String no) ( this.no = no;& TestCsrdNc*牝 void9 IdortityCirdNo instance: Iden

13、tiTYCandNoIdertitytardNoO _ etinsiane(.i: :dEitfty匚 ardPdr gerNoJ: String elNuinu: String): void飞5 .总结抽象出一般的单例模式类结构图,并进行角色说明 懒汉式:Oinstance坚LazySingleton-instance : LazySingleton = null- LazySingleton ()+ getInstance (): LazySingletonKcreates if(instance=null)instance=new LazySingleton();return insta

14、nce;饿汉式:EagerSingletoninstanceO - instance : EagerSingleton = new EagerSingleton()-EagerSingleton ()+ getInstance (): EagerSingletoncreatesinstance静态私有被实例化的成员变量静态公有的工厂方法 getInstance ()6.饿汉式单例模式和懒汉式单例模式的比较饿汉式单例类在自己被加载时就将自己实例化。单从资源利用效率角度来讲, 这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,则比懒汉式单例类稍好 些。懒汉式单例类在实例化时,必须处理好在多个线程同时首次引用此类时的访问 限制问题,特别是当单例类作为资源控制器,在实例化时必然涉及资源初始化,而 资源初始化很有可能耗费大量时间,这意味着出现多线程同时首次引用此类的机率 变得较大,需要通过同步化机制进行控制。五、核心代码与实验结果核心代码:import javax.swing.JOptionPane;public class TestCardNo p

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号