本文共 4145 字,大约阅读时间需要 13 分钟。
模拟现实生活只要知道现实中得工厂以及工厂得产品,无须知道怎样生产产品,直接可以获取。
在系统增加新的产品时,无需对原工厂和产品进行修改
工厂模式中有这几部分:抽象工厂,具体工厂,抽象产品,具体产品
package com.wx;//抽象工厂:提供了场品的生成方法public interface AbstractFactory { public Product newProduct();}
package com.wx;//具体工厂1:实现了厂品的生成方法public class ConcreteFactory1 implements AbstractFactory{ public Product newProduct() { System.out.println("具体工厂1生成--》具体产品1"); return new ConcreteProduct1(); }}
package com.wx;//抽象产品,提供产品得接口public interface Product { public void show();}
package com.wx;//具体产品1:实现抽象产品得抽象方法public class ConcreteProduct1 implements Product { public void show() { System.out.println("具体产品1显示.。。。"); }}
package com.wx;//具体产品2:实现抽象产品中的抽象方法public class ConcreteProduct2 implements Product{ public void show() { System.out.println("具体产品2显示。。。。"); }}
package com.wx;import org.w3c.dom.*;import javax.xml.parsers.*;import java.io.IOException;import java.io.InputStream;public class ReadXML1 { public static Object getObject(){ InputStream resourceAsStream = null; try{ //创建文档对象 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); Document doc; resourceAsStream = ReadXML1.class.getClassLoader().getResourceAsStream("config1.xml"); doc = builder.parse(resourceAsStream); Element root = doc.getDocumentElement(); String tagName = root.getTagName(); String str = root.getChildNodes().item(1).getFirstChild().getNodeValue(); Class aClass = Class.forName("com.wx." + str); Object o = aClass.newInstance(); return o; }catch (Exception e){ e.printStackTrace(); }finally { try { resourceAsStream.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } public static void main(String[] args) { ReadXML1.getObject(); }}
ConcreteFactory2
首先通过创建实例工厂,然后通过工厂创建实例对象,通过对象调用方法,这里省去了自己创建对象得过程,将创建得对象都交给了工厂。
package com.wx;public class AbstractFactoryTest { public static void main(String[] args) { try{ Product a; AbstractFactory af; //af = (AbstractFactory) ReadXML1.getObject(); af = new ConcreteFactory1(); a = af.newProduct(); a.show(); }catch (Exception e){ System.out.println(e.getMessage()); } }}
通过学习简单工厂,你就会发现,如果我有多个产品得话,就需要创建多个产品得工厂,产品得实现类,为了解决此问题,使用抽象工厂。还是包括这几部分:抽象工厂、具体工厂、抽象产品、具体产品。
package com.wx.chouxianggongchang;public interface AbstractFactory { public Product createProduct1(); public Product createProduct2();}
package com.wx.chouxianggongchang;public interface Product { public void work(String productName); public void ready(String productName);}
package com.wx.chouxianggongchang;public class Product1 implements Product{ public void work(String productName) { System.out.println("开始生产"+productName+"产品"); } public void ready(String productName) { System.out.println("准备生产"+productName+"产品"); }}
package com.wx.chouxianggongchang;public class Product2 implements Product{ public void work(String productName) { System.out.println("开始生产"+productName+"产品"); } public void ready(String productName) { System.out.println("准备生产"+productName+"产品"); }}
package com.wx.chouxianggongchang;public class ProductFactory implements AbstractFactory { public Product createProduct1() { return new Product1(); } public Product createProduct2() { return new Product2(); }}
在测试中首先创建工厂,然后通过工厂创建对象,通过对象来执行方法
package com.wx.chouxianggongchang;public class TestMain { public static void main(String[] args) { AbstractFactory abstractFactory = new ProductFactory(); Product product = abstractFactory.createProduct1(); product.ready("product1"); }}
转载地址:http://rirdb.baihongyu.com/