码迷,mamicode.com
首页 > 编程语言 > 详细

Java设计模式(五) 之 工厂模式

时间:2015-08-04 11:31:16      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:java   java设计模式   工厂模式   设计模式   

源码均以JDK1.8作为参考

1.定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

2.解析:
可能乍一看Factory设计模式的定义有点晕,但是细想想Factory的字面含义,其实也是很好理解的,所谓工厂,就是按照指定的需求生产出一些产品,Factory设计模式也不例外,是按照提供给Factory的需求说明,然后Factory按照需求生产出指定的产品,供调用的应用场景使用。
通用类图:
技术分享
类图解析:
2.1.Product(抽象产品类)
定义产品的共同特性,对产品实现类进行通用约束。
2.2.ConcreteProduct(产品实现类)
产品的具体定义,可以有多个产品类的存在,均需实现Product抽象产品类。
2.3.Creator(抽象创建类)
即抽象工厂,定义了实现工厂的上层约束。
2.4.ConcreteCreator(实现工厂)
完成产品类的具体创建。
Factory设计模式的实现是集中处理某一些可以高度抽象类的实例化过程,当然这个实例化过程也包括实例内部数据的初始化,即使这样说是不是也对Factory还是不太理解呢,那么接下来现看看Factory通用类图的具体实现。

3.具体应用:
3.1.Product(抽象产品类)

public abstract class Product {
    // .. 产品类的公共方法
    public void method1(){
        // .. 业务逻辑处理
    }
    // .. 抽象方法
    public abstract void method2();
}

3.2.ConcreteProduct(产品实现类)

public class ConcreteProduct1 extends Product {
    public void method2() {
        // .. 业务逻辑处理
    }
}
public class ConcreteProduct2 extends Product {
    public void method2() {
        // .. 业务逻辑处理
    }
}

3.3.Creator(抽象创建类)

public abstract class Creator {
    /*
     * 创建一个产品对象,其输入参数类型可以自行设置
     * 通常为String、Enum、Class等,当然也可以为空
     */
    public abstract <T extends Product> T createProduct(Class<T> c);
}

3.4.ConcreteCreator(实现工厂)

public class ConcreteCreator extends Creator {
    public <T extends Product> T createProduct(Class<T> c){
        Product product=null;
        try {
            product = (Product)Class.forName(c.getName()).newInstance();
        } catch (Exception e) {
            // .. 异常处理
        }
        return (T)product;
    }
}

这样是不是很一目了然呢,当需要ConcreteProduct1或者ConcreteProduct2中哪个类的实例时,只需要告诉ConcreteCreator要产生哪个类的实例就可以的,ConcreteCreator就可以按照具体的要求产生这个类的实例。工厂方法就是集中了同一类具有共同抽象的类的实例化过程,由此Factory进行具体的实例化。这样便于对类实例化进行管理,同时又屏蔽了具体类的实现细节。

注:本人是参照《设计模式之禅》和《设计模式》两本书学习所得,其中加入了自己对于Iterator设计模式的理解,以及对于JDK中源码的理解。下一篇将继续讲Factory的扩展模式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java设计模式(五) 之 工厂模式

标签:java   java设计模式   工厂模式   设计模式   

原文地址:http://blog.csdn.net/securitit/article/details/47271765

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!