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诞生记-原理与机制
一.看似偶然的东西实际是必然会发生的 我大学时候在图书馆翻过一本很破旧的书,讲生物理论的,主要内容就是探讨生命的产生是偶然还是必然.里面很多亚里士多德都看不懂的公式计算什么的,还有模拟原始地球环境出现 ...
随机推荐
- 在element-ui的select下拉框加上滚动加载
在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...
- 解决kali linux使用metasploit报错办法
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit- ...
- 将CSV文件导入到hive数据库
将csv文件导入hive后出现了所有的字段只显示在新建的表的第一个字段中,后面的字段全是null. 出现这种的原因是hive以行分隔数据,需要修改为按逗号' , ‘ 进行分隔读取, 具体操作如下, ...
- OSG选取点云坐标不准的解决办法
一.默认的相机和所有模型求交的方式 1.1 传统的模型与屏幕点求交的方法如下: osgViewer::View* viewer = dynamic_cast<osgViewer::View*&g ...
- CF1039D You Are Given a Tree 根号分治,贪心
CF1039D You Are Given a Tree LG传送门 根号分治好题. 这题可以整体二分,但我太菜了,不会. 根号分治怎么考虑呢?先想想\(n^2\)暴力吧.对于每一个要求的\(k\), ...
- 初窥Linux之我最常用的20条命令
1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切 ...
- Flutter - Finished with error: FormatException: Bad UTF-8 encoding 0xc3 (at offset 169)
方案1: 更改项目的Encoding方式 File -> Settings -> Editor, choose "File Encodings", change Pr ...
- js问题 window.location.hash和window.location.href有什么不同
hash:设置或获取 href 属性中在井号“#”后面的分段. href:设置或获取整个 URL 为字符串. 通过下面的测试你会发现区别,将代码放到你的HTML中,然后用浏览器打开,测试步骤: 点击“ ...
- Oracle10g 客户端安装与配置说明
1:百度文库 http://wenku.baidu.com/link?url=bA-FrFMaqxkoifwz-oiPeU5QmMVVJyy8rYDBryhTUCJywpkDS0VNJcObCIM8l ...
- 【转】阿里云Linux系统被攻击的处理过程
4-22日 19:48分,在等女儿跳舞下课的时候,在“多看”进入大刘等人的<毁灭之城:地球碎块>,读到了“诅咒 3.0”病毒出现的时候,阿里云发来短信“尊敬的用户,您的云服务器x.x.x. ...