初学Java设计模式随记 -- 工厂模式(Factory Pattern)
汽车在工厂组装好了我终于买了一辆奥迪A6[黑色,座椅,发动机,方向盘,四个轮子]。真是太好了!去兜风去。。。
?
顾客A很轻松地买了一辆奥迪A6,高兴地开着车兜风去了。。。
?
?
通过比较例子3和例子4,工厂模式的优势体现出来了:
利用工厂模式可以将对象的创建过程和使用进行分离(也就是解藕),可以将复杂的对象创建过程由工厂类进行了封装。
1.这样一来,客户端使用起来就显得非常轻松。
例如:如果客户想要红色的奥迪A6,那么,很简单,厂家给发一款红色的就可以了。客户只要高高兴兴地去开它就行了。
?
2.而且,这个系统,职责分明,思路清晰。
例如:如果出了车祸,如果是因为刹车问题造成的,那么就要找厂商;如果是因为顾客酒驾造成的,就要找顾客。
确定正确的调查对象,找到问题的真正原因,才能找到合适的解决方法,就不会有误判和冤案了。
?
3.此外,这样还起到了可以重用的作用。
例如:?无论有多少客户都买,只要买的是同一款,那么,只要用一套生产线就可以了,节省了很多时间和资源。
?
4.在将来的维护和修改时,就会减少使用对象的影响。
?
例如:客户不需要知道奥迪A6是怎么组装的。原来可能是由人手工装的;后来,是用机器装的;再后来,用了一套更先进的设备装的。这些都与客户无关,因为,客户买车,是为了开车,不需要了解车是怎么组装的。
?
再例如:多个客户购买了同一款汽车,如果这款汽车的刹车都有问题,那么,只需要修改一个工厂类就可以了,客户在使用过程中不会感觉到有什么变化,就不需要改变自己的使用方式了。
?
遗留的问题:
当我们使用JDBC对数据库进行操作的时候,是不是就用到了工厂模式?无论是连接Oracle还是MySQL,我们是不是写起来很简单?是不是不需要关心每种数据库的连接细节?是不是很容易就实现了从MySQL到Oracle的移植?是不是只是用了工厂模式???
?
工厂模式的应用似乎有很多,而且往往是和其他设计模式一起使用,在实际的项目和框架中都是怎么使用工厂模式的?
?
?好了,来个小小的总结:
一个系统的好坏,不是类越少就越好,通过使用设计模式,进行了解藕和封装,使得设计更加合理,系统看起来职责分明、清晰,维护和扩展也更容易。
但是,使用了设计模式,也并不能说就是合理的。就像例子1和例子2,设计模式就没有带来什么优势,反而,使得系统显得繁琐了。
?