博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
Discuz!X 3.4 任意文件删除漏洞复现过程(附python脚本)
查看>>
手机验证码常见漏洞总结
查看>>
PHP代码审计笔记--任意文件下载漏洞
查看>>
PHP反序列化漏洞
查看>>
PHP代码审计笔记--命令执行漏洞
查看>>
CPU特性漏洞测试(Meltdown and Spectre)
查看>>
Python类(五)-反射
查看>>
Python多进程-进程池
查看>>
Python函数(六)-嵌套函数
查看>>
Python数据库(一)-Mysql数据库的连接
查看>>
Python-SocketServer
查看>>
Python模块-shelve模块
查看>>
Python循环-break和continue
查看>>
Python模块-logging模块(一)
查看>>
Python模块-datetime模块
查看>>
Json数据手动解析
查看>>
UsageStatsManager怎样使用问题详解和获取应用使用信息
查看>>
Anroid API Guides 翻译学习——Introduction to Android(android 引入介绍)
查看>>
Android API Guides翻译与学习——Application Fundamentals
查看>>
ListView的setEmptyView方法解析
查看>>