前言
最近在看一本Head First系列的书,讲设计模式的。先后看了“观察者模式”和“工厂模式”。
目前,趁着业务代码迁移,已经用观察者模式重构了业务的核心部分。至于工厂模式,一直在用,但对于工厂模式是什么,还需理一理。
工厂做什么?
很明显,工厂用来制造产品。例如,鞋厂的产品是鞋子,汽车厂的产品是汽车。从面向对象的角度讲,工厂负责生产“对象”。
为什么要使用工厂模式?
从工厂做什么可以看出,工厂可以有很多客户。例如鞋厂,可以生产运动鞋、皮鞋、户外鞋等等,不同的客户需要不同的鞋子。对于客户来说,他们只关心工厂能不能生产自己想要的产品,至于工厂的其它产品,他们不需要知道。
再回到面向对象,举个例子,有个生成缓存服务的工厂,它可以生成数据库缓存服务和动态数据缓存服务。这些缓存服务都有共同的接口供客户调用,如set,get等等。
客户A需要缓存数据库记录,这通常是Memcached。客户B需要缓存动态数据,通常需要Redis这种可以持久化,更可靠的缓存服务。
A告诉工厂:给我来个数据库缓存,B告诉工厂:给我来个动态数据缓存。客户只关心产品是否可用,性能是否达到要求,至于生产细节,那就是工厂的事了。
总结
工厂模式分离了生产方和使用方,减轻了使用方负担。
更多
在网上搜工厂模式,看到几个变种:简单工厂模式、工厂方法模式、抽象工厂。简单看了下,不甚理解。
遇到问题,用某个模式解决该问题,才能更好的理解该模式。