抽象工厂模式java
[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:
代码按照图中顺序
package test4; public class BlackFactory implements MWFactory { public Man produceMan() { return new BlackSkinMan(); } public Woman produceWomen() { return new BlackSkinWomen(); } }
package test4; public class BlackSkinMan implements Man { public void play() { System.out.println("我是黑种男人!"); } }
package test4; public class BlackSkinWomen implements Woman { public void play() { System.out.println("我是黑种女人!"); } }
package test4; 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()); } } } //run此文件
package test4; public interface Man { public void play(); }
package test4; public interface MWFactory { public Man produceMan(); public Woman produceWomen(); }
package test4; public class WhiteFactory implements MWFactory { public Man produceMan() { return new WhiteSkinMan(); } public Woman produceWomen() { return new WhiteSkinWomen(); } }
package test4; public class WhiteSkinMan implements Man{ public void play() { System.out.println("我是白种男人!"); } }
package test4; public class WhiteSkinWomen implements Woman{ public void play() { System.out.println("我是白种女人!"); } }
package test4; public interface Woman { public void play(); }
package test4; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.SAXException; import java.io.*; public class XMLUtil { //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象 public static Object getBean() { try { //创建文档对象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File("Cainiao.iml")); //获取包含类名的文本节点 NodeList nl = doc.getElementsByTagName("className"); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); //通过类名生成实例对象并将其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; } catch(Exception e) { e.printStackTrace(); return null; } } }
package test4; public class YellowFactory { public Man produceMan() { return new YellowSkinMan(); } public Woman produceWomen() { return new YellowSkinWomen(); } }
package test4; public class YellowSkinMan implements Man{ public void play() { System.out.println("我是黄种男人!"); } }
package test4; public class YellowSkinWomen implements Woman{ public void play() { System.out.println("我是黄种女人!"); } }