工厂模式


概述

工厂方法即Factory Method,是一种对象创建型模式

目的(作用)

让创建对象和使用对象分离,并且调用方总是引用抽象工厂和抽象产品

工厂接口
//  定义一个用于创建对象的接口
public interface NumberFactory {
    Number parse(String s);
    static NumberFactory impl = new NumberFactoryImpl();
    //  获取工厂实例:
    //  定义一个静态方法getFactory()来返回真正的子类
    static NumberFactory getFactory() {
        return impl;
    }
    
}
工厂的实现类
public class NumberFactoryImpl implements NumberFactory {
    public Number parse(String s) {
        return new BigDecimal(s);
    }
}
调用方使用
NumberFactory factory = NumberFactory.getFactory();
Number result = factory.parse("123.456");

调用方可以完全忽略真正的工厂NumberFactoryImpl和实际的产品BigDecimal,这样做的好处是允许创建产品的代码独立地变换,而不会影响到调用方

静态工厂

通过静态方法直接返回产品

public class NumberFactory{
    public static Number parse(String s){
        return new BigDecimal(s);
    }
}

这种简化的使用静态方法创建产品的方式称为静态工厂方法(Static Factory Method)
静态工厂方法广泛地应用在Java标准库中

优势

工厂方法可以隐藏创建产品的细节,且不一定每次都会真正创建产品,完全可以返回缓存的产品,从而提升速度并减少内存消耗

提示

** 总是引用接口而非实现类,能允许变换子类而不影响调用方,即尽可能面向抽象编程**

总结

工厂方法是指定义工厂接口和产品接口,但如何创建实际工厂和实际产品被推迟到子类实现,从而使调用方只和抽象工厂与抽象产品打交道。

实际更常用的是更简单的静态工厂方法,它允许工厂内部对创建产品进行优化。

调用方尽量持有接口或抽象类,避免持有具体类型的子类,以便工厂方法能随时切换不同的子类返回,却不影响调用方代码


文章作者: zrh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zrh !
  目录