• 软件设计——抽象工厂模式之人与肤色


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

    1、类图


    2、源代码

    2.1  Man.java

    package test4;
    /*
     * 抽象产品类Man
     */
    public interface Man {
    
    	public void makeM();
    	
    }
    

    2.2  WhiteMan.java

    package test4;
    
    public class WhiteMan implements Man {
    	public void makeM() {
    		System.out.println("我是白种男人!");
    	}
    	
    }
    

    2.3  YelloeMan.java

    package test4;
    
    public class YellowMan implements Man {
    	public void makeM() {
    		System.out.println("我是黄种男人!");
    	}
    	
    }
    

    2.4  BlackMan.java

    package test4;
    
    public class BlackMan implements Man {
    	@Override
    	public void makeM() {
    		System.out.println("我是黑种男人!");
    	}
    	
    }
    

    2.5  Woman.java

    package test4;
    /*
     * 抽象产品类Woman
     */
    public interface Woman {
    
    	public void makeW();
    }
    

    2.6  WhiteWoman.java

    package test4;
    
    public class WhiteWoman implements Woman {
    	@Override
    	public void makeW() {
    		System.out.println("我是白种女人!");
    	}
    	
    }
    

    2.7  YellowWoman.java

    package test4;
    
    public class YellowWoman implements Woman {
    	public void makeW() {
    		System.out.println("我是黄种女人!");
    	}
    	
    }
    

    2.8  BlackWoman.java

    package test4;
    
    public class BlackWoman implements Woman {
    	@Override
    	public void makeW() {
    		System.out.println("我是黑种女人!");
    	}
    	
    }
    

    2.9  Color.java

    package test4;
    /*
     * 抽象工厂类 (肤色)
     */
    public interface Color {
    	
     public Man produceMan();
     public Woman produceWoman();
    	
    }
    

    2.10  White.java

    package test4;
    /*
     * 具体工厂类 白色肤色
     */
    public class White implements Color{
    	@Override
    	public Man produceMan() {
    		return new WhiteMan();
    	}
    	@Override
    	public Woman produceWoman() {
    		return new WhiteWoman();
    	}
    }
    

    2.11  Yellow.java

    package test4;
    /*
     * 具体工厂类 黄色肤色
     */
    public class Yellow implements Color{
    	@Override
    	public Man produceMan() {
    		return new YellowMan();
    	}
    	@Override
    	public Woman produceWoman() {
    		return new YellowWoman();
    	}
    }
    

    2.12  Black.java

    package test4;
    /*
     * 具体工厂类 黑色肤色
     */
    public class Black implements Color{
    	@Override
    	public Man produceMan() {
    		return new BlackMan();
    	}
    	@Override
    	public Woman produceWoman() {
    		return new BlackWoman();
    	}
    }
    

    2.13  XMLUtil.java

    package test4;
    /*
     * 读取XML文件并根据存储在XML文件中的类名获取对应的对象
     */
    
     import javax.xml.parsers.*;
     import org.w3c.dom.*;
     import java.io.File;
     public class XMLUtil {
         @SuppressWarnings("deprecation")
    	public static Object getBean() {
             try {
                     //创建DOM文档对象
                     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();
                     System.out.println("类名:  "+ cName); //输出类名
                     
                     //通过类名生成实例对象返回
                     Class c = Class.forName(cName);
                     Object obj = c.newInstance();
                     return obj;
             } catch (Exception e) {
                 e.printStackTrace();
                 return null;
             }
         }
     }
    

    2.14  Client.java

    package test4;
    /*
     * 客户端测试类
     */
    public class Client {
        public static void main(String[] args) {
        	try 
        	{
    	        Color color;
    	        Man man;
    	        Woman woman;
    	        color=(Color)XMLUtil.getBean();
    	        System.out.println(color);
    	        woman=color.produceWoman();
    	        woman.makeW();
    	        man=color.produceMan();
    	        man.makeM();
    	   }catch(Exception e){
    		   System.out.print(e.getMessage());
    	   }
    	   
       }
    }
    

    2.15  config.xml

    <?xml version="1.0" encoding="UTF-8"?>
     <config>
        <className>Black</className>
    </config>

    运行遇到错误:ClassNotFoundException

    最终找到解决办法:修改XMLUtil . java,在两处加上具体路径,问题解决。

  • 相关阅读:
    Codeforces 379 F. New Year Tree
    「NOI2018」屠龙勇士
    「NOI2018」归程
    深入理解Java枚举类型(enum)
    2018.6.9-学习笔记
    String、StringBuffer与StringBuilder介绍
    HashMap和HashTable到底哪不同?
    HashMap详解
    List,Set和Map详解及其区别和他们分别适用的场景
    Java中高级面试题(1)
  • 原文地址:https://www.cnblogs.com/ltw222/p/15334033.html
Copyright © 2020-2023  润新知