10.28

实验4:抽象工厂模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解抽象工厂模式的动机,掌握该模式的结构;

2、能够利用抽象工厂模式解决实际问题

 

[实验任务一]:人与肤色

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

 

实验要求:

1.画出对应的类图;

2.提交源代码;

3.注意编程规范。

1.类图

 

 

2.

 

package org.example;

public interface Color {

    public Man produceMan();
    public Woman produceWoman();

}

 

package org.example;

public interface Man {

    public void makeM();

}

 

package org.example;

public interface Woman {

    public void makeW();
}

 

package org.example;

public class Yellow implements Color{
    @Override
    public Man produceMan() {
        return new YellowMan();
    }
    @Override
    public Woman produceWoman() {
        return new YellowWoman();
    }
}

 

package org.example;

public class Black implements Color{
    @Override
    public Man produceMan() {
        return new BlackMan();
    }
    @Override
    public Woman produceWoman() {
        return new BlackWoman();
    }
}

 

package org.example;

public class White implements Color{
    @Override
    public Man produceMan() {
        return new WhiteMan();
    }
    @Override
    public Woman produceWoman() {
        return new WhiteWoman();
    }
}

 

package org.example;


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

}

 

package org.example;


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

}

//省略一些相似的类

package org.example;


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("D:/code/tu4/src/main/java/org/example/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("org.example."+cName);
            Object obj = c.newInstance();
            return obj;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

 

package org.example;

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

    }
}

 

3. 运行截图

 

 

 

posted @ 2024-10-28 17:38  umiQa  阅读(9)  评论(0)    收藏  举报