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

实现

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. cmd导出oracle数据库数据

    今天弄了下oracle数据库导入导出命令exp,imp 首先这个命令是在cmd直接执行,不是sqlplus登录后再执行,见下图: 再次,注意结尾不能有分号(;): exp scott/scott@su ...

  2. 解决Xcode 7 http无法使用的问题

    在info.plist文件中添加 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbit ...

  3. PHP中时间戳和时区

    时间戳 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 时区 由于世界各国家与地区经度不同,地方时也有所不同,因此 ...

  4. PHP:CURL分别以GET、POST方式请求HTTPS协议接口api

    1.curl以GET方式请求https协议接口 //注意:这里的$url已经包含参数了,不带参数你自己处理哦GET很简单 function curl_get_https($url){ $curl = ...

  5. struts2第三天——值栈

    大致内容: ognl概述 ognl入门 值栈 一.OGNL概述 OGNL,全称为Object-Graph Navigation Language,对象图导航语言 它是一个功能强大的表达式语言,用来获取 ...

  6. QtCore Module's Classes

    Qt Core C++ Classes Provides core non-GUI functionality. More... Reference These are links to the AP ...

  7. 12-[数据库]--图形工具Navicat

    1.Navicat介绍 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:ht ...

  8. TMS320VC5509总线驱动LED灯

    1. 重新建立的工程,需要添加宏定义才行 CHIP_5509 2. 驱动LED用的是74LVC573锁存器,LE高电平时,Q1=D0,LE低电平时,Q1=之前的状态,下面是数据总线 看下地址总线 看下 ...

  9. NLPIR分词(c++接口整理)

    C/C++接口——对应的各个函数 函数1-bool NLPIR_Init(const char * sInitDirPath=0, int encoding=GBK_CODE,constchar*sL ...

  10. 使用Keil下载单独的Hex文件到单片机内

    前言 初学STM32时,是通过串口1把Hex文件下载进STM32的,需要一个串口模块,而且还要设置BOOT0和BOOT1电平,然后通过FlyMcu软件进行下载,这也是一种不错的方法,这里我要介绍的是使 ...