一、题目要求

二、画出对应的类图

三、文件目录结构

四、具体实现代码

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实现软件设计模式---抽象工厂模式(性别产品等级结构肤色产品族)的更多相关文章

  1. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

  2. 设计模式 | 抽象工厂模式(abstract factory)

    定义: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. 结构:(书中图,侵删) 这个图相对来说有一点点复杂,其实就是在工厂方法模式的基础上做了一些扩展,工厂方法模式只用于生成一种 ...

  3. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. Groovy 设计模式 -- 抽象工厂 模式

    抽象工厂 https://blog.csdn.net/wyxhd2008/article/details/5597975 首先来看看这两者的定义区别: 工厂模式:定义一个用于创建对象的借口,让子类决定 ...

  5. C#设计模式——抽象工厂模式(原文转自:http://blog.jobbole.com/78059/)

    一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创 ...

  6. JAVA设计模式--抽象工厂模式

    抽象工厂设计模式 1.系统中有多个产品族,而系统一次只可能消费其中一族产品2.同属于同一个产品族的产品以其使用.来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):抽象工厂角色: 这是工厂方法模式的 ...

  7. 软件设计模式之工厂模式(JAVA)

    什么是工厂模式? 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为工厂模式就相 ...

  8. 2.java设计模式-抽象工厂模式

    抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一 ...

  9. Java设计模式-抽象工厂模式(Abstract Factory )

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  10. Java设计模式-抽象工厂模式(Abstarct Factory)

    抽象工厂模式 举个生活中常见的例子,组装电脑,在组装电脑时,通常需要选择一系列的配件,比如CPU,硬盘,内存,主板,电源,机箱等,为了讨论使用简单,值考虑选择CPU和主板的问题. 事实上,在选择CPU ...

随机推荐

  1. 24个javascript最佳实践

    1. 使用 === 代替 == JavaScript utilizes two different kinds of equality operators: === | !== and == | != ...

  2. webrtc 渲染音频时遇到的问题

    有用户反馈连麦时,直播间会有电流声,后面排查发现是 webrtc 内部播放器渲染音频时,用户的播放设备不支持 48000hz 采样率(我们传输的音频采样率都是 48000hz),导致音频数据受损而出现 ...

  3. win32-localtime的使用

    下面的例子用于反映本地系统的日期格式变化 // locale test #include <stdio.h> #include <locale.h> #include < ...

  4. Vue3基础知识提炼

    1.{{}} data2.""等同{{}},数据单向绑定v-bind: 简化 :3.v-if v-else4.v-for="(i, index) in array&quo ...

  5. mongo重启、远程连接

    1.查看当前mongo启动进程 ps -ef | grep mongo 2.修改mongo启动远程连接配制文件 vi /etc/mongod.conf 将 bind_ip=127.0.0.1 这一行注 ...

  6. 【Azure 环境】向Azure Key Vault中导入证书有输入密码,那么导出pfx证书的时候,为什么没有密码呢?

    问题描述 将pfx证书导入Key Vault的证书时,这个PFX需要输入正确的密码导入成功.但是当需要导出时,生成的pfx证书则不需要密码.这是正常的情况吗? 问题解答 是的,这是Azure Key ...

  7. 动态代码框架发布-CZGL.Roslyn

    CZGL.Roslyn 开源项目位置:https://github.com/whuanle/CZGL.CodeAnalysis 基于 Roslyn 技术的 C# 动态代码构建器以及编译器,开发者可以使 ...

  8. Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

    在之前的<手把手教你用 NebulaGraph AI 全家桶跑图算法>中,除了介绍了 ngai 这个小工具之外,还提到了一件事有了 Jupyter Notebook 插件: https:/ ...

  9. java数组案例

    数组:         数组就是用来存储一批同类型数据的内存区域(容器) 数组中的最大值实现方法:   数据拿到程序中去,用数组装起来. 定义一个变量,用于记录最大值.这个变量建议默认存储第一个元素作 ...

  10. win上vscode配置ffmpeg

    参考博客https://blog.csdn.net/leixiaohua1020/article/details/38868499 https://blog.csdn.net/weixin_37515 ...