9.19

软件设计 石家庄铁道大学信息学院

实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。

[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:

实验要求:

  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

Black
posted @ 2024-09-19 13:55  cor0000  阅读(4)  评论(0)    收藏  举报