抽象工厂模式(一)
使用抽象工厂模式,完成下述产品等级结构:
(1)类图
//Man.java package test4; 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; 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; 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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术