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

实现

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. linux文件系统初始化过程(1)---概述

    术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...

  2. Oracle 下马观花看redo

    ----------------------------------------- --Lerning Content :Oracle 下马观花看redo --Author :如人饮水冷暖自知 --版 ...

  3. Go指南 - 笔记

    Go指南 - 笔记 标签(空格分隔): Go Go指南 一.基础 1.包 每个Go程序都是由包构成的. 程序从main包开始运行. 包名与导入路径的最后一个元素一致 2.导入 分组导入:使用圆括号组合 ...

  4. Golang并行判断素数

    ## Golang多核判断素数方式 package main import ( "bufio" "fmt" "os" "runti ...

  5. docker 下 mysql 集群的搭建

    下载程序&&创建docker容器 从mysql官网https://dev.mysql.com/downloads/cluster/上下载mysql集群库mysql-cluster-gp ...

  6. spark本地环境的搭建到运行第一个spark程序

    搭建spark本地环境 搭建Java环境 (1)到官网下载JDK 官网链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8- ...

  7. 02-web框架

    1 while True: print('server is waiting...') conn, addr = server.accept() data = conn.recv(1024) prin ...

  8. 【HNOI2014】道路堵塞

    题面 题解 解法一 这个思路要基于以下一个结论: 当你删掉某条边\((x,x+1)\)时,最短路路线为:\(1\to x(\leq u)\to y(>u) \to n\),并且\(x\to y\ ...

  9. 4569: [Scoi2016]萌萌哒

    4569: [Scoi2016]萌萌哒 链接 分析: 每次给出的两个区间长度是一样的,对应位置的数字也是一样的,那么可以将两两对应的数字用并查集合并,设最后有$cnt$个不同的集合,答案就是$9\ti ...

  10. Kubernetes学习之路(八)之Kubeadm部署集群

    一.环境说明 节点名称 ip地址 部署说明 Pod 网段 Service网段 系统说明 k8s-master 192.168.56.11 docker.kubeadm.kubectl.kubelet ...