创建型模式——抽象工厂模式

一、 实验目的与要求

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

在这里插入图片描述

三、实验总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309481.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JavaWeb-MySQL]多表查询概述

多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20));INSERT INTO dept (NAME) VALUES (开发部),(市场部),(财务部);# 创建员工表CREATE TABLE em…

【壹刊】Azure AD(三)Azure资源的托管标识

一,引言来个惯例,吹水!????????????????????前一周因为考试,还有个人的私事,一下子差点颓废了。想了想,写博客这种的东西还是得坚持,再忙,也要检查。要养成一种…

自定义View

自定义View重写构造方法和onDraw方法 MyView.java package com.example.jrtt;import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.util.Lo…

[JavaWeb-JDBC]JDBC概念

JDBC: 1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口…

创建型模式——建造者模式

一、 实验目的与要求 1.练习使用工厂模式。设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。 2.实验结束后,对相关内容进行总结。 二、实验内容 1.模式应用场景说明 Decis创建一个获取多套餐信息,包含A套餐&#xf…

[JavaWeb-MySQL]事务的四大特征和隔离级别

事务的四大特征: 1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。3. 隔离性:多个事务之间。相互独立。4. 一致性&am…

android studio模拟器的安装与使用

来回弄了好几遍,网上也都搜过下载过很多版本,其中夜神模拟器是真的方便,也好用,棒极了!那么我就来分享一下: 第一,肯定是下载啦 下载链接:夜神模拟器官方 接着就是连接了&#xff0c…

如何训练解决问题的能力?

作为程序员,技术能力固然很重要,但平时除了提升技术能力也别忽略了其它方面的能力。你可以写一辈子代码,但你不能一辈子只写代码。当你的技术能力足以使你在公司站稳脚跟时,你可以停下来锻炼自己的管理能力,比如职场中…

[JavaWeb-MySQL]DCL管理用户,授权

DCL: * SQL分类:1. DDL:操作数据库和表2. DML:增删改表中数据3. DQL:查询表中数据4. DCL:管理用户,授权* DBA:数据库管理员* DCL:管理用户,授权1. 管理用户1…

PS照片换底色

因为写简历嘛,手边没有白色底的照片,就用ps换了个底色,记录一下,下次可能还要用。这里我用幂幂的照片来代替。 打开ps,点击文件,点击打开,找到你需要处理的照片。 -点击旁边的对象选择工具&…

小心 HttpClient 中的 FormUrlEncodeContent 的 bug

小心 HttpClient 中的 FormUrlEncodeContent 的 bugIntro最近发现活动室预约项目里的上传图片有时候会有问题,周末找时间测试了一下,发现小图片的上传没问题,大图片上传会有问题,而且异常信息还很奇怪,System.UriForma…

IDEA导入MySQL的jdbc驱动出现“java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver”

目录 一、一般的解决思路 1、JDBC下载链接 2、选择下载内容,并进行下载 3、将驱动导入java项目 二、依然导入驱动失败怎么办 当我们在idea中使用java操作mysql数据库时会出现: Exception in thread "main" java.lang.ClassNotFoundExce…

Android程序设计基础-设计布局之伪今日头条主界面

一、 实验目的 (1) 掌握Andriod Studio的基本使用方法; (2) 掌握Andriod Studio中常用的控件及其使用方法; 二、实验内容 (1)使用Android Studio编写任意一个Android程序并运行&a…

基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)

系列文章使用 abp cli 搭建项目给项目瘦身,让它跑起来完善与美化,Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API,包装返回模型再说Swagger,分组、描述、小绿锁接入GitHub,用JWT保护你的API异常处理和…

[JavaWeb]Web概念概述

web概念概述 * JavaWeb:* 使用Java语言开发基于互联网的项目* 软件架构:1. C/S: Client/Server 客户端/服务器端* 在用户本地有一个客户端程序,在远程有一个服务器端程序* 如:QQ,迅雷...* 优点:1. 用户体验…

android封装好的Color类中的常量

通过android封装好的Color类中的常量 public static final int BLACK 0xFF000000;public static final int DKGRAY 0xFF444444;public static final int GRAY 0xFF888888;public static final int LTGRAY 0xFFCCCCCC;public static final int WHITE 0xFFFFFFFF;public st…

MySql轻松入门系列——第一站 从源码角度轻松认识mysql整体框架图

一:背景1. 讲故事最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlserver是不可能…

[JavaWeb-JDBC]JDBC_快速入门_idea jdbc连接Mysql数据库

快速入门: * 步骤:1. 导入驱动jar包 mysql-connector-java-8.0.17.jar1.复制mysql-connector-java-8.0.17.jar到项目的libs目录下2.右键-->Add As Library2. 注册驱动3. 获取数据库连接对象 Connection4. 定义sql5. 获取执行sql语句的对象 Statement6…

嫌弃俄罗斯的火箭报价太黑!马斯克自己造火箭!SpaceX首次载人发射任务成功!太牛了!...

当你仰望天空,可曾想象到,距地8公里的平流层每分钟有65架飞机在天空穿梭,距地20公里有太阳能激光通信无人机展翅翱翔、高空通信热气球悠闲的漂荡,再往上有世界各大企业的低轨宽带卫星,在往上是各国的若干低轨道、中轨道…

[JavaWeb-HTML]HTML标签_列表标签

列表标签: * 有序列表:* ol:* li:* 无序列表:* ul:* li: