sampleFactory(女娲造人)
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。


package create;
import create.People;
import create.PeopleFactory;
import create.XMLUtilPeople;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
People pe;
String createName=XMLUtilPeople.getCreateName();
pe=PeopleFactory.producePeople(createName);
pe.play();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
package create;
import create.People;
public class Man implements People
{
public void play()
{
System.out.println("Man");
}
}
package create;
public interface People
{
public void play();
}
package create;
import create.Man;
import create.Women;
import create.People;
import create.Robot;
public class PeopleFactory {
public static People producePeople(String create) throws Exception
{
if(create.equalsIgnoreCase("M"))
{
System.out.println("Man");
return new Man();
}
else if(create.equalsIgnoreCase("W"))
{
System.out.println("Women");
return new Women();
}
else if(create.equalsIgnoreCase("R"))
{
System.out.println("Robot");
return new Robot();
}
else
{
throw new Exception("对不起,女娲不在,暂不能生产该类型的人或机器!!");
}
}
}
package create;
public class Robot implements People
{
public void play()
{
System.out.println("Robot");
}
}
package create;
public class Women implements People
{
public void play()
{
System.out.println("Women");
}
}
package create;
import java.io.File;
import javax.xml.parsers.*;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLUtilPeople {
//该方法用于从XML配置文件中提取品牌名称,并返回该品牌名称
public static String getCreateName()
{
try
{
//创建文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("configPeople.xml"));
//获取包含品牌名称的文本节点
NodeList nl = doc.getElementsByTagName("createName");
Node classNode=nl.item(0).getFirstChild();
String createName=classNode.getNodeValue().trim();
return createName;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
}

sampleFactory类说明
People抽象产品类,它可以是一个接口,也可以是一个抽象类,其中包含了所有产品具有的业务方法。
具体产品类(Many、Women、Robot)是抽象产品类People接口的子类,是一种具体产品,实现了在People接口中定义的业务方法。
工厂类PeopleFactory,是工厂类,它是整个系统的核心,它提供了静态工厂方法producePeople()工厂方法中包含一个字符串类型的参数,在内部业务逻辑根据参数值的不同实例化不同的具体产品类,返回相应的对象。
sampleFactory(女娲造人)的更多相关文章
- 设计模式(java)--简单工厂模式之女娲造人.水果农场
女娲抟土造人 话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面. 女娲造人,这就是简单工厂模式的应用. 首先,在这个造人的思 ...
- 女娲造人引发思考之Java设计模式:工厂模式
目录 工厂模式的几种形态 简单工厂模式 示例 结构 优缺点 女娲抟土造人 工厂方法模式 结构 女娲举绳造人 抽象工厂模式 结构 女娲造万物 工厂模式的几种形态 工厂模式专门负责将大量有共同接口的类实例 ...
- C++ 系列:设计模式研究
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- 从人类社会的角度看OO(独家视角)
引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的"社会"关系,从而让我们抛弃书 ...
- JavaScript 对象的创建和对6种继承模式的理解和遐想
JS中总共有六种继承模式,包括原型链.借用构造函数.组合继承.原型式继承寄生式继承和寄生组合式继承.为了便于理解记忆,我遐想了一个过程,对6中模式进行了简单的阐述. 很长的一个故事,姑且起个名字叫 ...
- [转载]jQuery诞生记-原理与机制
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3520 一.看似偶然的 ...
- 【代码笔记】iOS-看图听故事
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFo ...
- 《Inside UE4》-2-GamePlay架构(一)Actor和Component
<Inside UE4>-2-GamePlay架构(一)Actor和Component <Inside UE4>-2-GamePlay架构(一)Actor和Compon ...
- jQuery诞生记-原理与机制
一.看似偶然的东西实际是必然会发生的 我大学时候在图书馆翻过一本很破旧的书,讲生物理论的,主要内容就是探讨生命的产生是偶然还是必然.里面很多亚里士多德都看不懂的公式计算什么的,还有模拟原始地球环境出现 ...
随机推荐
- 拥抱.NET Core系列:MemoryCache 缓存过期 (转载)
阅读目录 MSCache项目 MSCache提供的过期方式 绝对时间到期 滑动时间到期 自定义过期策略 过期策略组合拳 缓存过期回调 写在最后 在上一篇”拥抱.NET Core系列:MemoryCac ...
- iOS 用KVC设置结构体
iOS 用KVC设置结构体 在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体.这很不面向对象. 执行下面的语句将会报错: [self setValue:@() forKeyPat ...
- Linux的任务计划管理
在手机中,我们常常使用备忘录或者是闹钟等来提醒我们该做什么事情了,在Linux操作系统中,也有类似的操作. 在Linux中除了用户即时执行的命令操作以外,还可以配置在指定的时间.指定的日期执行预先 ...
- GHOST自动恢复说明
制作一个自己DIY的PE系统,然后自动安装系统使用如下步骤... 1: 首先要解包PE ISO文件,在解压ISO中的WIM文件.使用工具是7Zip,可以直接解压 2: 其次在放入替换的exe文件. ...
- QT中QToolTip样式设置的两种方式
方式一 使用样式表设置 ui.label->setStyleSheet("QToolTip{border:1px solid rgb(118, 118, 118); backgroun ...
- Qt中插入html样式
Qt中引入html调节样式 HTML 设置行间距字体高度和颜色 <html><head/><body><p style=\"height:16px; ...
- Cannot find an exact (case-sensitive) match for 'crtbp.m
http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=277326&page=1&extra=#pid3296048
- pythonDjango开发-创建django程序
1.创建jgango程序 a.命令 cmd命令行下 进入到需要创建项目的路径下 django-admin startproject mysite 创建项目 cd mysite 进入项目文件夹 pyt ...
- 2-4 list练习题
参考答案 >>> names = [] >>> names.append('old_driver') >>> names.append('rain ...
- python中函数的定义和详细的使用方法
1. 函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 2. 函数的作用,使用函数可以加强代码的复用性,提高程序编写的效率 3. 函数的使用,函数必须先创建才 ...