简单工厂、工厂方法、抽象工厂之小结
2014-07-27 12:14 Loull 阅读(212) 评论(0) 收藏 举报工厂模式的好处就是为系统结构提供灵活的动态扩展机制.减速少工作量,方便维护,达到跟源代码解耦
简单工厂
只是把创造对象的代码简单的移到一个专门用来创建对象的类。
简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
不修改代码的话,是无法扩展的。
Class Client { public static void main(...){ A.getInstanceX(); new B().getInstanceX(); } }
就是把创建实例X的动作放到其他类里面。
也可以放在X类自己的静态方法里面,可以实现单例模式。
静态工厂函数则是类自己提供了一个静态的方法用来产生自己的对象(或者子类对象),它的好处有很多,经典的可以用来创建单例模式,或者创建实例受限制的多例模式。
工厂方法
工厂方法模式就是一种比较好用的模式了,它将创建对象的工作延迟到子类,代码依赖于抽象而不是具体,这种模式我感觉又有点像模板方法模式。
比如Object的toString()
java.util.Calendar#getInstance()
java.util.ResourceBundle#getBundle()
java.text.NumberFormat#getInstance()
java.nio.charset.Charset#forName()
java.net.URLStreamHandlerFactory#createURLStreamHandler(String)
(Returns singleton object per protocol)
工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。
在同一等级结构中,支持增加任意产品。
抽象工厂
抽象工厂模式则是基于工厂方法模式,它针对一个产品族了。
抽象工厂是应对产品族概念的。比如说,每个汽车公司可能要同时生产轿车,货车,客车,那么每一个工厂都要有创建轿车,货车和客车的方法。
应对产品族概念而生,增加新的产品线很容易,但是无法增加新的产品。
小结
★工厂模式中,重要的是工厂类,而不是产品类。产品类可以是多种形式,多层继承或者是单个类都是可以的。但要明确的,工厂模式的接口只会返回一种类型的实例,这是在设计产品类的时候需要注意的,最好是有父类或者共同实现的接口。
★使用工厂模式,返回的实例一定是工厂创建的,而不是从其他对象中获取的。
★工厂模式返回的实例可以不是新创建的,返回由工厂创建好的实例也是可以的。