抽象工厂模式(一)
使用抽象工厂模式,完成下述产品等级结构:
(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>