Java实现软件设计模式---抽象工厂模式(性别产品等级结构肤色产品族)
一、题目要求

二、画出对应的类图

三、文件目录结构


四、具体实现代码
Black.java
1 package com.a004;
2
3 public class Black implements Color{
4 @Override
5 public Man produceMan() {
6 return new BlackMan();
7 }
8
9 @Override
10 public Woman produceWoman() {
11 return new BlackWoman();
12 }
13 }
BlackMan.java
1 package com.a004;
2
3 public class BlackMan implements Man{
4 @Override
5 public void play(){
6 System.out.println("我是黑种男人!");
7 }
8 }
BlackWoman.java
1 package com.a004;
2
3 public class BlackWoman implements Woman {
4
5 @Override
6 public void play() {
7 System.out.println("我是黑种女人!");
8 }
9 }
Color.java
1 package com.a004;
2
3 public interface Color {
4 public Man produceMan();
5 public Woman produceWoman();
6 }
Yellow.java
1 package com.a004;
2
3 public class Yellow implements Color{
4 @Override
5 public Man produceMan() {
6 return new YellowMan();
7 }
8
9 @Override
10 public Woman produceWoman() {
11 return new YellowWoman();
12 }
13 }
White.java
1 package com.a004;
2
3 public class White implements Color {
4 @Override
5 public Man produceMan() {
6 return new WhiteMan();
7 }
8
9 @Override
10 public Woman produceWoman() {
11 return new WhiteWoman();
12 }
13 }
Man.java
1 package com.a004;
2
3 public interface Man {
4 public void play();
5 }
WhiteMan.java
1 package com.a004;
2
3 public class WhiteMan implements Man {
4 @Override
5 public void play() {
6 System.out.println("我是白种男人!");
7 }
8 }
YellowMan.java
1 package com.a004;
2
3 public class YellowMan implements Man{
4 @Override
5 public void play() {
6 System.out.println("我是黄种男人!");
7 }
8 }
Woman.java
1 package com.a004;
2
3 public interface Woman {
4
5 public void play() ;
6 }
WhiteWoman.java
1 package com.a004;
2
3 public class WhiteWoman implements Woman {
4 @Override
5 public void play() {
6 System.out.println("我是白种女人!");
7 }
8 }
YellowWoman.java
1 package com.a004;
2
3 public class YellowWoman implements Woman {
4 @Override
5 public void play() {
6 System.out.println("我是黄种女人!");
7 }
8 }
五、测试代码以及配置代码
XMLUtil.java
1 package com.a004;
2 import javax.xml.parsers.*;
3 import org.w3c.dom.*;
4 import org.xml.sax.SAXException;
5 import java.io.File;
6 public class XMLUtil {
7 public static Object getBean() {
8 try {
9 //创建DOM文档对象
10 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
11 DocumentBuilder builder = dFactory.newDocumentBuilder();
12 Document doc;
13 doc = builder.parse(new File("config.xml"));
14 //获取包含类名的文本节点
15 NodeList nl = doc.getElementsByTagName("className");
16 Node classNode = nl.item(0).getFirstChild();
17 String cName = classNode.getNodeValue();
18 System.out.println("类名: "+ cName); //输出类名
19 //通过类名生成实例对象返回
20
21 Object obj = null;
22 try {
23 Class c =Class.forName("com.a004."+cName);
24 obj = c.newInstance();
25 } catch (ClassNotFoundException e) {
26 System.out.println("ClassNotFoundException");
27 e.printStackTrace();
28 } catch (InstantiationException e) {
29 System.out.println("InstantiationException");
30 e.printStackTrace();
31 } catch (IllegalAccessException e) {
32 System.out.println("IllegalAccessException");
33 e.printStackTrace();
34 }
35 return obj;
36 } catch (Exception e) {
37 e.printStackTrace();
38 return null;
39 }
40 }
41 }
config.xml
1 <?xml version = "1.0"?>
2 <config>
3 <className>Black</className>
4 </config>
Client.java
1 package com.a004;
2 public class Client {
3 public static void main(String[] args) {
4 Color color;
5 Man man;
6 Woman woman;
7 color=(Color) XMLUtil.getBean();
8 // color=new White();
9 woman=color.produceWoman();
10 woman.play();
11 man=color.produceMan();
12 man.play();
13 }
14 }
测试结果

Java实现软件设计模式---抽象工厂模式(性别产品等级结构肤色产品族)的更多相关文章
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- 设计模式 | 抽象工厂模式(abstract factory)
定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- Groovy 设计模式 -- 抽象工厂 模式
抽象工厂 https://blog.csdn.net/wyxhd2008/article/details/5597975 首先来看看这两者的定义区别: 工厂模式:定义一个用于创建对象的借口,让子类决定 ...
- C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)
一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创 ...
- JAVA设计模式--抽象工厂模式
抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...
- 软件设计模式之工厂模式(JAVA)
什么是工厂模式? 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为工厂模式就相 ...
- 2.java设计模式-抽象工厂模式
抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一 ...
- Java设计模式-抽象工厂模式(Abstract Factory )
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...
- Java设计模式-抽象工厂模式(Abstarct Factory)
抽象工厂模式 举个生活中常见的例子,组装电脑,在组装电脑时,通常需要选择一系列的配件,比如CPU,硬盘,内存,主板,电源,机箱等,为了讨论使用简单,值考虑选择CPU和主板的问题. 事实上,在选择CPU ...
随机推荐
- 解决idea中使用git fetch报远程仓库Authentication failed
这个问题是项目组同事在从git服务器clone代码后做fetch操作老是报错: Authentication failed, 弹出框提示:invalid user or password 其实问题出i ...
- Java并发编程实例--10.使用线程组
并发API提供的一个有趣功能是可以将多个线程组成一个组. 这样我们就能将这一组线程看做一个单元并且提供改组内线程对象的读取操作.例如 你有一些线程在执行同样的任务并且你想控制他们,不考虑有多少个线程仍 ...
- win32- 窗口模板
主要用于日常的win32窗口的测试 #include <Windows.h> #include <stdio.h> #include <iostream> usin ...
- 常用JDBC连接池
如下整理常用JDBC连接池组件. HikariCP 针对不同的JDK需要引入对应的HikariCP,详见:Github项目地址 . 以JDK8为例子,在项目中引入如下依赖: <dependenc ...
- 亲测CentOS 8.2更换yum源报错Errors during downloading metadata for repository 'epel': - Status code解决办法
重点 提一件拉胯的事:别去参考阿里和华为云官方镜像上面的解决办法,本人试了几遍,没luan用.拉胯!!!!!!!! 报错具体信息 Errors during downloading metadata ...
- djang中orm使用iterator()
当查询结果有很多对象时,QuerySet的缓存行为会导致使用大量内存.如果你需要对查询结果进行好几次循环,这种缓存是有意义的,但是对于 queryset 只循环一次的情况,缓存就没什么意义了.在这种情 ...
- Jenkins配置SpringBoot项目启动脚本
目录 背景 脚本编写 变量说明 使用说明 Q&A jenkins部署时错误 背景 上一篇Jenkins配置介绍了Jenkins远程部署的相关配置和步骤,但是最后的部署脚本只适用于部署原始tom ...
- Nebula Graph 源码解读系列 | Vol.03 Planner 的实现
上篇我们讲到 Validator 会将由 Parser 生成的抽象语法树(AST)转化为执行计划,这次,我们来讲下执行计划是如何生成的. 概述 Planner 是执行计划(Execution Plan ...
- Java 接口的使用
1 package com.bytezreo.interfacetest; 2 3 /** 4 * 5 * @Description 接口的使用 6 * @author Bytezero·zhengl ...
- CSV转Excel,命中关键词标红
CSV转Excel,命中关键词标红 package com.wenwo.schedule.job.mainJob; import java.io.ByteArrayOutputStream; impo ...