设计模式


三种基本创建型模式的应用(java)

1.题目分析:
(1)实验内容:本次实验主要是对简单工厂模式、工厂方法模式以及抽象工程模式的实际应用。
(2)算法分析:①简单工厂模式主要算法思想是专门定义一个类来负责创建其他类的实例,是将对象新创建与对象本身操作分离。在简单工厂模式中,可以根据参数的不同来返回不同的类的实例,需注意的是被创建的实例通常有共同的父类。例如,男人、女人、机器人都有一个共同的接口person,他们各有自己的行为方法,但是都继承了person的成员方法。女娲造人则女娲就是一个工厂,他可以根据不同的参数创造不同的生物,因此需要创建一个工厂类personfactory,在工厂中有一个创造函数,根据不同参数产生男人、女人以及机器人类的实例对象。②工厂模式主要算法思想是工厂父类负责定义创建产品对象的公共接口,而工厂子类方负责生成具体的产品对象,将产品类的实例化延迟到工厂子类中完成,及通过工厂子类来确定究竟应该实例化哪一个具体产品类。例如,工厂负责生产空调,美的工厂负责生产美的空调,海尔工厂负责生产海尔空调,于是海尔工厂和美的工厂都应继承工厂类,各自负责生成海尔空调和美的空调的实例对象。
③抽象工厂类主要算法思想是提供一个创建一系列相关或互相依赖的对象的接口。例如,pc工厂生产pc的ram和CPU,mac工厂生产mac的cpu和ram ,pc工厂和mac工厂分别实现computer工厂 接口,负责ram和cpu的生产,pc的cpu和ram类分别负责ram和cpu的运作实现cpu和ram接口。
④JAVA中配置文件xml的应用。Java操作xml文件方式有:①DOM②SAX③DOM4J④JDOM前两种是JAVA官方提供方法,本次实验我用到了DOM对xml文件进行操作。DOM是将整个xml文档中标签看作一个个节点,通过获得节点,来逐个对节点进行操作。在操作过程中需要用到NodeList,Node和NamedNodeMap三个接口,以及Document,DocumentBuliderFactory和DocumentBulider三个类。(具体解析在总结中解释)在本次实验中,我用到了Document中的getElementsByTagName(String)获取包含类名的节点,及Node类的getfirstchlid()得到第一个子节点。
2.具体代码实现
简单工厂方法实现女娲造人
设计模式_第1张图片
设计模式_第2张图片
设计模式_第3张图片
设计模式_第4张图片
设计模式_第5张图片
设计模式_第6张图片
设计模式_第7张图片
在这里插入图片描述
工厂方法实现空调生产
设计模式_第8张图片
设计模式_第9张图片
设计模式_第10张图片
设计模式_第11张图片
设计模式_第12张图片
设计模式_第13张图片
设计模式_第14张图片
设计模式_第15张图片
在这里插入图片描述

抽象工厂方法实现各个品牌的cpu和ram生产
设计模式_第16张图片
设计模式_第17张图片
设计模式_第18张图片
设计模式_第19张图片
设计模式_第20张图片设计模式_第21张图片
设计模式_第22张图片
设计模式_第23张图片
在这里插入图片描述
设计模式_第24张图片
设计模式_第25张图片
在这里插入图片描述
3.调试和运行结果以及测试截图
运行结果
简单工厂实现女娲造人
在这里插入图片描述工厂方法实现空调生产

在这里插入图片描述

抽象工厂方法实现cpu和ram的生产
设计模式_第26张图片
4.实验总结
通过本次实验我基本掌握了简单工厂模式、工厂方法模式以及抽象工厂模式的相关知识。这三种模式都属于类创建性模式。简单工厂模式是将对象创建和随想本身业务分离,它的优点是无需知道所创建的 产品类名,可引入配置文件xml.但其缺点是在增添新的产品时违反了面向对象的开闭原则。工厂方法模式是父类负责创建产品对象公共接口,而工厂子类分成具体的产品对象,将产品实例化操作延迟到工厂子类中完成。它的优点是增加具体产品需增加具体工厂符合面对对 象的开闭性原则。抽象工厂模式提供一个创建一系列相关或相互依赖的对象的接口,而无从指定它们具体的类,它的优点是隔离了具体类的生成,使客户端并不需要知道什么被创建。当一个产品中的多个对象被设计一起工作时,它能够保证客户端只是用一个产品族中对象,增加新产品族无需修改。而且我还掌握了Java操作xml文件方式有:①DOM②SAX③DOM4J④JDOM前两种是JAVA官方提供方法,本次实验我用到了DOM对xml文件进行操作。DOM是将整个xml文档中标签看作一个个节点,通过获得节点,来逐个对节点进行操作。在操作过程中需要用到NodeList,Node和NamedNodeMap三个接口,以及Document,DocumentBuliderFactory和DocumentBulider三个类。(具体解析在总结中解释)在本次实验中,我用到了Document中的getElementsByTagName(String)获取包含类名的节点,及Node类的getfirstchlid()得到第一个子节点。通过这次实验我得到的感悟是:遇到困难时的心态要平和,冷静地去查找问题并解决问题。注意知识的总结和积累。

你可能感兴趣的:(设计模式)