作者:无*
时间:2019.5.1
一.题目分析
掌握简单工厂模式、工厂方法模式、抽象工厂模式,并进行设计应用。
以下是对三个模式进行简单的介绍并写出了自己的大致思路。
1.简单工厂模式:
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象。利用配置文件进行传参。建立抽象产品类People,工厂角色类peoplefactory,在分别写三个具体的角色类Man,Woman,Robot
equalsIgnoreCase()用来比较字符串是否相等
配置文件://创建文档对象 //获取包含名称的文本节点
<?xml version="1.0"?>
<config>
<className>NameOfFactory</className>
</config>
具体代码:
//创建DOM文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("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;
2.工厂方法模式:
在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。
创建的类中,有抽象产品类,具体的产品类(Haier)(Midea);抽象工厂类,具体的工厂类(Haierfactory)(Mideafactory)
3.抽象工厂模式:
在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同。
分别创建:抽象工厂类Factory;具体工厂类Macfactory和Pcfactory;
抽象产品和具体产品类:CPU,RAM
二.类图设计
以下为简单工厂,工厂方法,抽象工厂方法模式的设计类图
三.程序实现 四.调试,测试及运行结果
1.调试截图
(1)简单工厂模式
(2)工厂方法模式
(3)抽象方法模式
2.测试及其代码
(1)简单工厂模式
(2)工厂方法模式
(3)抽象工厂模式
3.运行结果
(1)简单工厂模式
(2)工厂方法模式
(3)抽象工厂模式
五.经验归纳
此次上机主要是让我们熟悉主要的设计模式,这次是通过具体的实例了解并掌握了简单工厂模式,工厂方法模式以及抽象工厂模式,并了解到了不同设计模式的优缺点。
简单工厂模式:
简单工厂模式包含如下角色:
Factory:工厂角色
Product:抽象产品角色
ConcreteProduct:具体产品角色
由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构,工厂类不能得到很好地扩展。
工厂方法模式:
工厂方法模式包含如下角色:
Product:抽象产品
ConcreteProduct:具体产品
Factory:抽象工厂
ConcreteFactory:具体工厂
工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节。但系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销。
抽象工厂模式:
抽象工厂模式包含如下角色:
AbstractFactory:抽象工厂
ConcreteFactory:具体工厂
AbstractProduct:抽象产品
ConcreteProduct:具体产品
当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
不同的设计模式可运用到不同的实例中,通过此次编程,还掌握了配置文件的应用,学会如何分析一个实例,并判断一个实例在最优情况下使用哪种设计模式。