博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工厂模式
阅读量:2256 次
发布时间:2019-05-09

本文共 4145 字,大约阅读时间需要 13 分钟。

工厂模式:

模拟现实生活只要知道现实中得工厂以及工厂得产品,无须知道怎样生产产品,直接可以获取。

在系统增加新的产品时,无需对原工厂和产品进行修改

工厂模式中有这几部分:抽象工厂,具体工厂,抽象产品,具体产品

1.建立抽象工厂

package com.wx;//抽象工厂:提供了场品的生成方法public interface AbstractFactory {    public Product newProduct();}

2.建立具体工厂

package com.wx;//具体工厂1:实现了厂品的生成方法public class ConcreteFactory1 implements AbstractFactory{    public Product newProduct() {        System.out.println("具体工厂1生成--》具体产品1");        return new ConcreteProduct1();    }}

3.建立抽象产品

package com.wx;//抽象产品,提供产品得接口public interface Product {    public void show();}

4. 建立具体产品

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显示。。。。");    }}

5.读取xml配置文件

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(); }}

6. xml文件

ConcreteFactory2

7. 测试类

首先通过创建实例工厂,然后通过工厂创建实例对象,通过对象调用方法,这里省去了自己创建对象得过程,将创建得对象都交给了工厂。

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());        }    }}

结果:

                                                              

抽象工厂

通过学习简单工厂,你就会发现,如果我有多个产品得话,就需要创建多个产品得工厂,产品得实现类,为了解决此问题,使用抽象工厂。还是包括这几部分:抽象工厂、具体工厂、抽象产品、具体产品。

1.抽象工厂

package com.wx.chouxianggongchang;public interface AbstractFactory {    public Product createProduct1();    public Product createProduct2();}

2.抽象产品

package com.wx.chouxianggongchang;public interface Product {    public void work(String productName);    public void ready(String productName);}

3.具体产品

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+"产品");    }}

4.具体工厂

package com.wx.chouxianggongchang;public class ProductFactory implements AbstractFactory {    public Product createProduct1() {        return new Product1();    }    public Product createProduct2() {        return new Product2();    }}

5 .测试

在测试中首先创建工厂,然后通过工厂创建对象,通过对象来执行方法

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/

你可能感兴趣的文章
MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)
查看>>
在notepad++中 “tab转为空格”、“按tab插入空格”、“文档格式转换”
查看>>
Zend Framework 常用组件概述
查看>>
Zend_Db -> Zend_Db_Adapter
查看>>
Zend_Db -> Zend_Db_Select
查看>>
Zend_Db -> Zend_Db_Table
查看>>
PHP漏洞全解(三)-客户端脚本植入
查看>>
Java学习日记 求最值 排序 选择 冒泡 交换
查看>>
IO流输出系统信息
查看>>
File类常见方法
查看>>
File对象功能-文件列表
查看>>
IO流列出目录下所有内容,带层次
查看>>
IO流删除带内容的目录
查看>>
IO流切割文件
查看>>
IO流-对象序列化操作流
查看>>
DataInputStream与DataOutputStream用于操作基本数据类型的数据的流对象
查看>>
ByteArrayStream用于操作字节数组的流对象
查看>>
IO流-转换流的字符编码转换-ISO-8859-1和utf-8和GBK互转
查看>>
MySQL:MySQL日期数据类型、MySQL时间类型使用总结
查看>>
理解MySQL——并行数据库与分区(Partition)
查看>>