Abstract Factory Pattern:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。
代码
// 抽象产品-Button public interface Button { public void display(); } // 抽象产品-文本框 public interface TextField { public void display(); } / // 具体产品-春天按钮 public class SpringButton implements Button { @Override public void display() { System.out.println("显示浅绿色按钮"); } } // 具体产品-夏天按钮 public class SummerButton implements Button { @Override public void display() { System.out.println("显示浅蓝色按钮"); } } // 具体产品-春天文本框 public class SpringTextField implements TextField { @Override public void display() { System.out.println("显示绿色边框文本框"); } } // 具体产品-夏天文本框 public class SummerTextField implements TextField { @Override public void display() { System.out.println("显示蓝色边框文本框"); } } <!--config.xml--> <?xml version="1.0" encoding="UTF-8" ?> <config> <className>com.nq.AFP.SpringSkinFactory</className> </config // 工具类-读取配置文件 public class XMLUtil { public static Object getBean() { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("src\\com\\nq\\AFP\\config.xml")); NodeList nodeList = document.getElementsByTagName("className"); Node node = nodeList.item(0).getFirstChild(); String cName = node.getNodeValue().trim(); Class object = Class.forName(cName); return object.newInstance(); } catch (Exception e) { e.printStackTrace(); return null; } } } // 客户端测试类 public class Client { public static void main(String[] args) { SkinFactory skinFactory; skinFactory = (SkinFactory) XMLUtil.getBean(); Button button = skinFactory.createButton(); TextField textField = skinFactory.createTextField(); button.display(); textField.display(); } } 增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,违背了开闭原则