使用抽象工厂模式,完成下述产品等级结构:

实现

UML类图

public class BlackFactory implements MWFactory
{
 public Man produceMan()
 {
  return new BlackSkinMan();
 }
 
 public Women produceWomen()
 {
  return new BlackSkinWomen();
 }
}

public class BlackSkinMan implements Man
{
 public void play()
 {
  System.out.println("黑色皮肤的男人出现");
 }
}

public class BlackSkinWomen implements Women
{
 public void play()
 {
  System.out.println("黑色皮肤的女人出现");
 }
}

public class Client
{
 public static void main(String args[])
 {
         try
         {
          MWFactory factory;
          Man m;
          Women w;
          factory=(MWFactory)XMLUtil.getBean();
          m=factory.produceMan();
          m.play();
          w=factory.produceWomen();
          w.play();
         }
         catch(Exception e)
         {
          System.out.println(e.getMessage());
         }
 }
}

public interface Man
{
 public void play();
}

public interface MWFactory
{
 public Man produceMan();
 public Women produceWomen();
}

public class WhiteFactory implements MWFactory
{
 public Man produceMan()
 {
  return new WhiteSkinMan();
 }
 
 public Women produceWomen()
 {
  return new WhiteSkinWomen();
 }
}

public class WhiteSkinMan implements Man
{
 public void play()
 {
  System.out.println("白色皮肤的男人出现");
 }
}

public class WhiteSkinWomen implements Women{
  public void play()
  {
   System.out.println("白色皮肤的女人出现");
  }
 
}

public interface Women
{
 public void play();
}

import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
 public static Object getBean()
 {
  try
  {
   //创建文档对象
   DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = dFactory.newDocumentBuilder();
   Document doc;       
   doc = builder.parse(new File("config.xml"));
  
   //获取包含类名的文本节点
   NodeList nl = doc.getElementsByTagName("className");
            Node classNode=nl.item(0).getFirstChild();
            String cName=classNode.getNodeValue();
           
            //通过类名生成实例对象并将其返回
            Class c=Class.forName(cName);
        Object obj=c.newInstance();
            return obj;
           }  
            catch(Exception e)
            {
             e.printStackTrace();
             return null;
            }
  }
}

public class YellowFactory implements MWFactory
{
 public Man produceMan()
 {
  return new YellowSkinMan();
 }
 
 public Women produceWomen()
 {
  return new YellowSkinWomen();
 }
}

public class YellowSkinMan implements Man
{
 public void play()
 {
  System.out.println("黄色皮肤男人出现");
 }
}

public class YellowSkinWomen implements Women{
 public void play()
 {
  System.out.println("黄色皮肤的女人出现");
 }
}

AbstractFactory 抽象工厂(AbstractFactory)
用于声明生成抽象产品的方法,在抽象工厂里可以定义一组方法,每一个方法对应一个产品等级结构。
ConcreteFactory 具体工厂(BlackFactory、WhiteFactory、YellowlFactory)
实现了抽象工厂声明的抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中。
AbstractProduct 抽象产品(Man、Women)
为每种产品声明接口,定义了产品的抽象业务方法。
ConcreteProduct 具体产品(BM、WM、YM、BW、WW、YW)
定义具体工厂生产的具体产品对象,实现抽象产品接口定义的业务方法。

AbstractFactory(PeopleSkin)的更多相关文章

  1. 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)

    本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...

  2. 23种设计模式 - 对象创建(FactoryMethod - AbstractFactory - Prototype - Builder)

    其他设计模式 23种设计模式(C++) 每一种都有对应理解的相关代码示例 → Git原码 ⌨ 对象创建 通过"对象创建" 模式绕开new,来避免对象创建(new)过程中所导致的紧耦 ...

  3. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

  4. Java中的GOF23(23中设计模式)--------- 工厂模式(Factory)

    Java中的GOF23(23中设计模式)--------- 工厂模式(Factory) 在给大家介绍工厂模式之前,我想和大家聊聊面向对象的那点事,在这里,引入三个概念. 开闭原则(Open Close ...

  5. C#设计模式(3):抽象工厂模式(Abstract Factory)(转载)

    概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...

  6. .NET设计模式(7):创建型模式专题总结(Creational Pattern)(转)

    概述 创建型模式,就是用来创建对象的模式,抽象了实例化的过程.它帮助一个系统独立于如何创建.组合和表示它的那些对象.本文对五种常用创建型模式进行了比较,通过一个游戏开发场景的例子来说该如何使用创建型模 ...

  7. .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)

    概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...

  8. .NET设计模式(3):抽象工厂模式(Abstract Factory)

    ):抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory) --探索设计模式系列之三 Terrylee,2005年12月12日 转载:http://terr ...

  9. 设计模式(c#)代码总结

    设计模式分为三种类型 创建型模式:简单工厂.工厂方法模式.抽象工厂模式.建造者模式.原型模式.单例模式 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式. 行为型模式 ...

随机推荐

  1. Centos 模拟生成文件的脚本

    #!/bin/sh count= #控制每秒写入不同大小的文件 while true do ;i<=$count;i++)) do /bin/-`.jpg done ;i<=$count; ...

  2. 微信公众号发送消息模板(java)

    这段时间接触公众号开发,写下向用户发送消息模板的接口调用 先上接口代码 public static JSONObject sendModelMessage(ServletContext context ...

  3. 在Linux中连接android设备

    1.用usb线连接电脑和android设备,在命令行中输入lsusb可查看采用usb连接到电脑的设备 找到设备的vendor ID. 如上图: "Bus 002 Device 007: ID ...

  4. SpringBoot与mongodb的结合

    本文系列文章: ​ 使用Shell 操作 MongoDB的技巧 ​ MongoTemplate的使用技巧及其注意事项 敬请期待. 前言 最近公司想要做一个用户行为数据的收集,最开始想用mysql来存储 ...

  5. Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

    Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...

  6. python3爬虫-下载网易云音乐,评论

    # -*- coding: utf-8 -*- ''' 16位随机字符的字符串 参数一 获取歌曲下载地址 "{"ids":"[1361348080]" ...

  7. 第十周课下作业-IPC

    第十周课下作业-IPC 题目:研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接 共享内存 管道 FIFO 信号 消息队列 共享内存 共享内存允许两个或多个进程进程共 ...

  8. 20145209刘一阳《JAVA程序设计》课堂测试总结

    20145209刘一阳<JAVA程序设计>课堂测试总结 这次重新学习JAVA这门课,我对本学期没有参与的测试进行了总结并制作成二维码方便老师检查,详细内容如下: 第一周课堂测试### ht ...

  9. Python 装饰器笔记

    一.装饰器无参数 1.原函数无参数 def wrap_in_tag_b(fn): # wrap_in_tag_b 是真正的装饰器 def wrapped(): return "<b&g ...

  10. Deep Learning Tutorial 李宏毅(一)深度学习介绍

    大纲 深度学习介绍 深度学习训练的技巧 神经网络的变体 展望 深度学习介绍 深度学习介绍 深度学习属于机器学习的一种.介绍深度学习之前,我们先大致了解一下机器学习. 机器学习,拿监督学习为例,其本质上 ...