软件设计 石家庄铁道大学信息学院
实验4:抽象工厂模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解抽象工厂模式的动机,掌握该模式的结构;
2、能够利用抽象工厂模式解决实际问题。
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
实验要求:
1.画出对应的类图;
2.提交源代码;
3.注意编程规范。
源代码:
BlackFactory.java
package moshi;
public class BlackFactory implements MWFactory
{
public Man produceMan()
{
return new BlackSkinMan();
}
public Woman produceWomen()
{
return new BlackSkinWomen();
}
}
BlackSkinMan.java
package moshi;
public class BlackSkinMan implements Man
{
public void play()
{
System.out.println("我是黑种男人!");
}
}
BlackSkinWomen.java
package moshi;
public class BlackSkinWomen implements Woman
{
public void play()
{
System.out.println("我是黑种女人!");
}
}
Client.java
package moshi;
public class Client
{
public static void main(String args[])
{
try
{
MWFactory factory;
Man m;
Woman w;
factory=(MWFactory)XMLUtil.getBean();
m=factory.produceMan();
m.play();
w=factory.produceWomen();
w.play();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
Man.java
package moshi;
public interface Man
{
public void play();
}
MWFactory.java
package moshi;
public interface MWFactory
{
public Man produceMan();
public Woman produceWomen();
}
WhiteFactory.java
package moshi;
public class WhiteFactory implements MWFactory
{
public Man produceMan()
{
return new WhiteSkinMan();
}
public Woman produceWomen()
{
return new WhiteSkinWomen();
}
}
WhiteSkinMan.java
package moshi;
public class WhiteSkinMan implements Man{
public void play()
{
System.out.println("我是白种男人!");
}
}
WhiteSkinWomen.java
package moshi;
public class WhiteSkinWomen implements Woman{
public void play()
{
System.out.println("我是白种女人!");
}
}
Woman.java
package moshi;
public interface Woman
{
public void play();
}
XMLUtil.java
package moshi;
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("Cainiao.xml"));
//获取包含类名的文本节点
NodeList nl = doc.getElementsByTagName("className");
Node classNode = nl.item(0).getFirstChild();
String cName = classNode.getNodeValue();
//通过类名生成实例对象返回
Class c = Class.forName("chouxiang."+cName);
Object obj = c.newInstance();
return obj;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
YellowFactory.java
package moshi;
public class YellowFactory {
public Man produceMan()
{
return new YellowSkinMan();
}
public Woman produceWomen()
{
return new YellowSkinWomen();
}
}
YellowSkinMan.java
package moshi;
public class YellowSkinMan implements Man{
public void play()
{
System.out.println("我是黄种男人!");
}
}
YellowSkinWomen.java
package moshi;
public class YellowSkinWomen implements Woman{
public void play()
{
System.out.println("我是黄种女人!");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!