10.6

 

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

 

实验要求:

1. 画出对应的类图;

2.提交源代码;

3.注意编程规范。

 

1.类图:

 

 

源代码:

  Man.java

package test4;/*

 * 抽象产品类Man

 */public interface Man {

 

public void makeM();

 

}

  WhiteMan.java

package test4;

public class WhiteMan implements Man {

public void makeM() {

System.out.println("我是白种男人!");

}

 

}

  YelloeMan.java

package test4;

public class YellowMan implements Man {

public void makeM() {

System.out.println("我是黄种男人!");

}

 

}

 BlackMan.java

package test4;

public class BlackMan implements Man {

@Override

public void makeM() {

System.out.println("我是黑种男人!");

}

 

}

  Woman.java

package test4;/*

 * 抽象产品类Woman

 */public interface Woman {

 

public void makeW();

}

  WhiteWoman.java

package test4;

public class WhiteWoman implements Woman {

@Override

public void makeW() {

System.out.println("我是白种女人!");

}

 

}

  YellowWoman.java

package test4;

public class YellowWoman implements Woman {

public void makeW() {

System.out.println("我是黄种女人!");

}

 

}

  BlackWoman.java

package test4;

public class BlackWoman implements Woman {

@Override

public void makeW() {

System.out.println("我是黑种女人!");

}

 

}

 Color.java

package test4;/*

 * 抽象工厂类 (肤色)

 */public interface Color {

 

 public Man produceMan();

 public Woman produceWoman();

 

}

  White.java

package test4;/*

 * 具体工厂类 白色肤色

 */public class White implements Color{

@Override

public Man produceMan() {

return new WhiteMan();

}

@Override

public Woman produceWoman() {

return new WhiteWoman();

}

}

 Yellow.java

package test4;/*

 * 具体工厂类 黄色肤色

 */public class Yellow implements Color{

@Override

public Man produceMan() {

return new YellowMan();

}

@Override

public Woman produceWoman() {

return new YellowWoman();

}

}

 Black.java

package test4;/*

 * 具体工厂类 黑色肤色

 */public class Black implements Color{

@Override

public Man produceMan() {

return new BlackMan();

}

@Override

public Woman produceWoman() {

return new BlackWoman();

}

}

 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;

         }

     }

 }

 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());

   }

   

   }

}

 config.xml

<?xml version="1.0" encoding="UTF-8"?>

 <config>

<className>Black</className></config>

 

 

运行截图:

 

 

posted on 2024-10-06 19:41  HA_wind  阅读(14)  评论(0)    收藏  举报

导航