创建型模式——工厂模式
一、 实验目的与要求
1.练习使用工厂模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。
2.实验结束后,对相关内容进行总结。
二、实验内容
1.模式应用场景说明
作为一个青年人,最好的伙伴就是手机。而手机最重要的就是手机的CPU。两家公司Huawei和Apple要寻找一个代工厂。但是由于光刻机数量不足,因此,同一时间只允许有一种类型的CPU进行生产。可以修改外部配置文件,可以控制不同的CPU的生产。
2.应用场景类图
3.实现代码与解释
3.1抽象产品类
package 工厂模式;
public interface CPU {public void play();
}
3.2具体产品类HuaweiCPU
package 工厂模式;public class HuaweiCPU implements CPU {@Overridepublic void play() {System.out.println("Huawei的CPU生产中...");}
}
3.3具体产品类 AppleCPU
package 工厂模式;public class AppleCPU implements CPU {public void play() {System.out.println("Apple的CPU生产中...");}
}
3.4 抽象工厂类CPUFactory
package 工厂模式;public interface CPUFactory {public CPU produceCPU();
}
3.5具体工厂类HuaweiFactory
package 工厂模式;public class HuaweiFactory implements CPUFactory {public CPU produceCPU() {System.out.println("华为手机工厂生产华为CPU");return new HuaweiCPU();}
}
3.6具体工厂类AppleFactory
package 工厂模式;public class AppleFactory implements CPUFactory{public CPU produceCPU() {System.out.println("苹果手机工厂生产苹果CPU");return new AppleCPU();}
}
3.7辅助代码:获取外界配置文件的信息
package 工厂模式;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBean(){try{//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc; doc = builder.parse(new File("C:\\Users\\33132\\Desktop\\工厂模式\\工厂模式\\src\\工厂模式\\config.xml")); //获取包含类名的文本节点NodeList nl = doc.getElementsByTagName("className");Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Class c=Class.forName("工厂模式."+cName);Object obj=c.newInstance();return obj;} catch(Exception e){e.printStackTrace();return null;}}
}
3.8外界配置文件
4.结果及分析
4.1将配置文件节点改成AppleFactory
4.2将配置文件节点改成HuaweiFactory
三、实验总结
优点:可拓展性好,完全符合“开闭原则”。
缺点:由于考虑到系统的可拓展性,需要引入抽象层,增加了系统抽象性的理解难度。
创建型模式——工厂模式相关推荐
- JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂——区分“变与不变”
JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂--区分"变与不变" 先来说说构造器 在介绍工厂模式之前,为了辅助大家的理解,我想先在这儿给大家介绍 ...
- JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”
JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...
- 设计模式(20):创建型-抽象工厂模式(Abstract Factory)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 【创建型】工厂模式(Factory Pattern)详解
工厂模式分为简单工厂.工厂方法.抽象工厂模式. 这一篇说一下简单工厂.工厂方法: 简单工厂 :用来生产同一等级结构中的任意产品.(不支持拓展增加产品) 工厂方法 :用来生产同一等级结构中的固定产品.( ...
- (创建型)设计模式——工厂模式(factory)
ps:在以下讲述工厂模式中,模仿的场景如下:我们需要生产Car,建立相对应的CarFactory.使用CarFactory工厂来生产Car,并且可以在生产过程中进行一些处理.类图和代码如下. 1.Mo ...
- Java设计模式之创建型:原型模式
一.什么是原型模式: 原型模式主要用于对象的创建,使用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.UML类图如下: 原型模式的核心是就是原型类 Prototype,Prototype ...
- Java设计模式之创建型:建造者模式
一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...
- 创建型设计模模式---原型模式
设计模式 序号 内容 链接地址 1 设计模式七大原则 https://blog.csdn.net/qq_39668819/article/details/115390615 2 创建型设计模式–工厂模 ...
- 创建型设计模模式---建造者模式
设计模式 序号 内容 链接地址 1 设计模式七大原则 https://blog.csdn.net/qq_39668819/article/details/115390615 2 创建型设计模式–工厂模 ...
- 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript
设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...
最新文章
- 基于WINCE6.0+S3C6410通过USB下载stepldr
- Yacc 与 Lex 快速入门
- 使用 Azure DevTest Lab 搭建云端开发测试环境
- C++实现简单的信息管理系统
- oracle账号密码修改后特别容易锁定_Oracle密码过期如何取消密码180天限制及过期,账号锁住的问题...
- sprintboot 后端将音频流写入到前端播放_freac for mac(音频和CD格式转换器)
- Python推箱子小游戏源代码
- abaqus2017安装后启动cae报错_Abaqus2017安装全过程
- 文件另存为GBK编码格式
- 2010年山东省区县级农作物面积及产量统计数据
- sas 显示本地服务器,sas连接服务器local
- 文档损坏了怎么修复?文档修复方法分享
- getSreenWH()
- 网络安全 Windows用户密码破解 使用破解MD5值的在线网站和监听工具Cain
- 亚麻种子的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- mac 重启php-fpm
- Python开发Windows桌面应用程序(一)PyCharm+PyQt5开发环境搭建
- UE4角色受击动画,随机播放音效
- python学习知识点
- 萨尔大学计算机受限,【德国留学】留学受限专业是怎么回事?如何被受限专业录取?...
热门文章
- React Native之hardwareBackPress
- Android之jni解决JNIEnv跨线程问题
- C语言atoi()函数:将字符串转换成int(整数)和sprintf和memset
- node.js npm常用命令
- mysql分页原理和sqlserver里面序列的用法
- linux nginx线程池,nginx使用线程池提升9倍性能
- 计算机转财经专业考试考什么,高三对口升学第三次模拟考试财经基础课计算机专业课...
- 如何用c语言验证一个定理,验证动量定理方法一
- cvtcolor python opencv_二值分析 | OpenCV + skimage如何提取中心线
- 20以内究竟包不包括20?