一、 实验目的与要求

1.练习使用工厂模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。
2.实验结束后,对相关内容进行总结。

二、实验内容

1.模式应用场景说明

手机CPU生产工厂:在一个工厂里面,有Apple和Huawei两种生产线。Huawei可以生产Huawei电脑和Huawei手机,APPLE可以生产APPLE电脑和APPLE手机。解决这个问题,可以抽象一个电器生产厂。下面有两个具体的工程,一个叫Huawei工厂,一个叫APPLE工厂。有两条生产线,一条生产线可以生产APPLE电脑和Huawei电脑,另一条生产线可以生产APPLE手机和Huawei手机。

2.应用场景类图

3.实现代码与解释

3.1抽象产品类Phone

package 抽象工厂模式;
public interface Phone {public void play();
}

3.2具体产品类ApplePhone

package 抽象工厂模式;
public class ApplePhone implements Phone {public void play() {System.out.println("Apple手机使用中...");}
}

3.3具体产品类 HuaweiPhone

package 抽象工厂模式;
public class HuaweiPhone implements Phone {public void play() {System.out.println("Huawei手机使用中...");}
}

3.4抽象产品类Computer

package 抽象工厂模式;
public interface Computer {public void useComputer();
}

3.5具体产品类AppleComputer

package 抽象工厂模式;
public class AppleComputer implements Computer{public void useComputer() {System.out.println("Apple电脑使用中...");}
}

3.6具体产品类 HuaweiComputer

package 抽象工厂模式;
public class HuaweiComputer implements Computer{public void useComputer() {System.out.println("Huawei电脑使用中...");}
}

3.7 抽象工厂类EFactory

package 抽象工厂模式;
public interface EFactory {public Phone producePhone();public Computer produceComputer();
}

3.8具体工厂类HuaweiFactory

package 抽象工厂模式;
public class HuaweiFactory implements EFactory{public Phone producePhone() {return new HuaweiPhone();}public Computer produceComputer() {return new HuaweiComputer();}
}

3.9具体工厂类AppleFactory

package 抽象工厂模式;
public class AppleFactory implements EFactory{public Phone producePhone() {return new ApplePhone();}public Computer produceComputer() {return new AppleComputer();}
}

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("F:\\创建型模式\\抽象工厂模式\\抽象工厂模式\\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

三、实验总结

优点:隔离了具体类的生成,可以是实现高内聚低耦合的设计目的。
缺点:涉及对抽象工厂的角色及其对所有子类的修改,显然带来较大的不便。

创建型模式——抽象工厂模式相关推荐

  1. 每天学习一个设计模式(八):创建型之抽象工厂模式

    目录 一.基本概念 二.通俗解释 三.应用场景 1.使用简单工厂模式的解决方案 2.抽象工厂模式 抽象工厂模式结构 在什么情况下应当使用抽象工厂模式 抽象工厂模式的起源 四.抽象工厂模式的优缺点 抽象 ...

  2. 创建型设计模式——抽象工厂模式

    1.什么是抽象工厂模式? 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合. 从设计层面看,抽 ...

  3. 创建型模式-抽象工厂模式

    抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...

  4. 软件架构设计师-创建型模式-单例模式-原型模式-工厂方法模式-抽象工厂模式-建造者模式

    文章目录 1.单例模式 2.原型模式 3.工厂方法(Factory Method)模式 4.抽象工厂(AbstractFactory)模式 5.建造者(Builder)模式 6.作者答疑   在面向对 ...

  5. 设计模式-创建型模式-抽象工厂模式

    工程源码:设计模式-创建型模式-抽象工厂模式https://download.csdn.net/download/qq_40788199/85544119 码云:设计模式-创建型模式-抽象工厂模式ht ...

  6. 创建型设计模式之工厂模式

    文章目录 一.工厂设计模式 二.工厂设计模式详解 1.简单工厂模式 2. 工厂方法模式 3. 抽象工厂模式 总结 一.工厂设计模式 工厂模式就类比实际生活中的工厂,在实际生活中,用户从来不会关系一个物 ...

  7. Java设计模式—工厂方法模式抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  8. 软件设计模式之工厂模式抽象工厂模式

    一.工厂模式 工厂方法模式(别名:虚拟构造):定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 工厂方法模式的关键是在一个接口或抽象类中 ...

  9. Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式

    本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...

最新文章

  1. gtx1080 驱动 linux,CentOS 7安装Nvidia GTX1080显卡驱动
  2. 海外网络推广浅析关键词优化需要注意哪些事项?
  3. Ⅶ:教你一招利用zookeeper作为服务的配置中心
  4. 计算机视觉会议与专家(重排版)
  5. [css] 当拿到一个新的项目,让你对这个项目的css做下架构设计,你该如何下手?
  6. 数据可视化的基础知识·翻译完成
  7. 开源中文bi_odoo:免费开源ERP入门与实践
  8. 拓端tecdat|在R语言中轻松创建关联网络
  9. homework7_ZhankunLuo
  10. 第三章 硅谷宠儿 Friendster (二)
  11. 深入理解FT,DTFT,DFT 之间的关系
  12. 苹果logo_苹果 ARM Mac 发布会独特标志 Logo 亮相
  13. python入门笔记(4)
  14. 计算机是人类的好伴侣 作文,有电脑真好作文
  15. Xftp5 安装教程
  16. c语言用pow求x的y次幂,使用系统函数pow(x,y)计算x的y次方的值,注意包含头文件math.h...
  17. gaussDB200 单节点安装
  18. linux进下一级目录下,linux进入下一级目录的命令
  19. leetcode之美团公司算法
  20. 1027: 判断水仙花数 Java

热门文章

  1. C和指针之字符串编程练习1
  2. C之memset、memcpy、strcpy、strncpy区别
  3. linux c之snprintf()和sprintf()区别
  4. Android之用jadx进行反编译
  5. pythonweb服务器怎么让别人访问_Django配置让其他电脑访问网站
  6. 快速排序算法_Python实现快速排序算法
  7. 缺少linux内核,Linux内核缺页
  8. 视图添加字段_Odoo开发教程2-为模型添加字段
  9. 岛国人气美少女竟然每晚跟 3 个人通宵打麻将?
  10. 落在我手里,今天你能嫁出去算我输!