使用简单工厂模式模拟女娲(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(女娲造人)的更多相关文章

  1. 设计模式(java)--简单工厂模式之女娲造人.水果农场

    女娲抟土造人 话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面. 女娲造人,这就是简单工厂模式的应用.  首先,在这个造人的思 ...

  2. 女娲造人引发思考之Java设计模式:工厂模式

    目录 工厂模式的几种形态 简单工厂模式 示例 结构 优缺点 女娲抟土造人 工厂方法模式 结构 女娲举绳造人 抽象工厂模式 结构 女娲造万物 工厂模式的几种形态 工厂模式专门负责将大量有共同接口的类实例 ...

  3. C++ 系列:设计模式研究

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  4. 从人类社会的角度看OO(独家视角)

    引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的"社会"关系,从而让我们抛弃书 ...

  5. JavaScript 对象的创建和对6种继承模式的理解和遐想

      JS中总共有六种继承模式,包括原型链.借用构造函数.组合继承.原型式继承寄生式继承和寄生组合式继承.为了便于理解记忆,我遐想了一个过程,对6中模式进行了简单的阐述. 很长的一个故事,姑且起个名字叫 ...

  6. [转载]jQuery诞生记-原理与机制

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3520 一.看似偶然的 ...

  7. 【代码笔记】iOS-看图听故事

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFo ...

  8. 《Inside UE4》-2-GamePlay架构(一)Actor和Component

    <Inside UE4>-2-GamePlay架构(一)Actor和Component     <Inside UE4>-2-GamePlay架构(一)Actor和Compon ...

  9. jQuery诞生记-原理与机制

    一.看似偶然的东西实际是必然会发生的 我大学时候在图书馆翻过一本很破旧的书,讲生物理论的,主要内容就是探讨生命的产生是偶然还是必然.里面很多亚里士多德都看不懂的公式计算什么的,还有模拟原始地球环境出现 ...

随机推荐

  1. YUV420图像旋转90算法的优化

    在做android摄像头捕获时,发现从android摄像头出来的原始视是逆时针旋转了90度的,所以须要把它顺时针旋转90.android视频支持的是NV21格式,它是一种YUV420的格式.当然,始果 ...

  2. oracle 事务 数据伪列

    在用户进行数据更新操作(DML)事务一定会起作用. 事务的出现会保证数据的完整性.一致性.在整个事务的处理过程之中主要使用两个操作命令: · 事务的提交(COMMIT):是真正的向数据库之中发出更新指 ...

  3. oracle快速学习

  4. Windows 视频Directshow开发介绍

    在Windows平台上实现一个文件播放器有什么好的开发库和方案呢?方案有很多,比如基于FFmpeg,VLC的插件,mplayer,Directshow.用FFmpeg来实现文件格式解析.分离视频音频流 ...

  5. JavaWeb基础—JDBC入门

    一.什么是JDBC JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成 二.JDBC原理概述 JDBC原理:其实就是一组规范(就是对类的规范 ...

  6. JS 判断滚动底部并加载更多效果。。。。。。。。。

    JS 判断滚动底部并加载更多效果......... <html lang="zh-cn"> <head> <meta http-equiv=" ...

  7. [COGS257]动态排名系统 树状数组套主席树

    257. 动态排名系统 时间限制:5 s   内存限制:512 MB [问题描述]给定一个长度为N的已知序列A[i](1<=i<=N),要求维护这个序列,能够支持以下两种操作:1.查询A[ ...

  8. Linux命令学习笔记1

    1.Linux命令学习 2.Mkdir /data       -创建文件夹 在/下创建文件夹 data 3.Cd               -目录切换 列如cd / 4.Touch /data/1 ...

  9. 12-[CSS]-margin塌陷,margin 0 auto,善用父级的padding

    1.margin塌陷 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  10. 01- web应用与https协议

    1. import socket server = socket.socket() server.bind(("127.0.0.1", 8800)) server.listen(5 ...