还是工厂模式:)这个模式用得“相当”频繁,问题也比较的,主要是简单工厂,工厂方法,抽象工厂看上去都很相似。
一下整理自我和一个网友的聊天记录:
问题提出:
喻乐(35466616) 12:26:27
吃完饭问个问题,简单工厂和工厂方法那个更好?
喻乐(35466616) 12:28:28
觉得简单工厂也没什么不好,和工厂方法差不多,就是不能继承,每次要创建一个新的对象的时候后要修改其代码,但是工厂模式要创建一个新的对象也需要从抽象类继承,也要添加很多代码,其优越性体现在哪里?
喻乐(35466616) 12:39:40
客户端调用也要指定具体的工厂方法啊
肖鹏(59092922) 12:41:18
客户端虽然指定具体方法,但是方法是抽象的返回的也是接口,而不是具体类。
喻乐(35466616) 12:46:00
返回的应该是实现了接口的具体类啊
肖鹏(59092922) 12:42:44
返回的是接口的实例
喻乐(35466616) 12:47:56
但是简单工厂返回的也是接口的实例阿。
肖鹏(59092922) 12:44:52
简单工厂不能通过继承动态的扩展
喻乐(35466616) 12:49:04
那就往里面加啊:)我觉得添加的代码比工厂方法少啊:)
肖鹏(59092922) 12:46:22
是啊,这样你就动了原来的代码了,设计模式很多时候就是为了,不用修改原有代码适应新的扩展啊
肖鹏(59092922) 12:47:17
简单工厂就像杀鸡刀,工厂方法就像杀牛刀,杀牛刀当然要复杂一些:)
喻乐(35466616) 12:51:17
我觉得这点改动对于这个系统的影响不大。
喻乐(35466616) 12:51:44
其他很多模式的采用是我们大量的缩减了改动的代码:)
肖鹏(59092922) 12:48:20
简单工厂不支持与具体类的平行继承结构,这对于复杂的继承结构很不利
喻乐(35466616) 12:52:45
确实,估计我只考虑了简单结构的情况,当结构一复杂回答来很多不利的影响:)谢谢了
喻乐(35466616) 12:53:57
还是你理解得透彻:)
肖鹏(59092922) 12:50:50
我原来也有这个问题,你看我的博客就能看出来:)
肖鹏(59092922) 12:51:48
有一个现成的例子就是抽象工厂,抽象工厂往往都是用工厂方法来实现的,你想像一下如果用简单工厂能实现吗?
肖鹏(59092922) 12:59:40
我觉得这个疑问很多人都有,因为SimpleFactory是如此“简单易用”:)