学习设计模式过程中遇到的疑惑与不解,同时记录从网上查看诸多文章的一点自己的理解与思考。
一、工厂模式与建造者模式的介绍
参考:菜鸟教程 (个人觉得非常适合初学者学习,内容简单详细并且易理解)
二、工厂模式与建造者模式的区别
1. 最核心的不同
工厂模式侧重点在于创建不同的对象
创建者模式侧重于用不同的方式创建同一个对象
为何这么说呢?看了工厂模式与建造者模式示例代码,不难发现工厂就是提供对象的一个类,根据不同条件new出不同的对象(图1)。建造者模式的具体创建者类创建的是同一个对象,只是这个对象的内核可能不同(类变量的值不同)(图2)。
图 1
图 2
这里其实已经把区别非常清楚了,工厂就是将一系列实现了某个接口或者继承了某个类的类的创建聚集到一起。创建者就是花式创建一个类。这里你可能会疑惑,创建一个类只需要提供足够多的构造函数就行了,为啥需要在多用一个类来实现?这就需要了解什么是设计模式了
什么是设计模式?
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
那么现在回过头来说,为什么要如此设计,当这个类被大量使用时,是不是每次使用我们都需要先new一个这个对象,然后给这个对象的属性赋值或者通过这个类的构造方法将传递进去。第一种方式必然会导致代码冗余,第二种看起来好像没什么问题。但是如果我们给这个对象增加一个属性,那么之前的代码就需要全部进行修改,导致代码的维护变更变得困难。
如果使用创建者模式我们只需要增加一个新的具体创建类就可以,无需修改原有代码。这样我们代码的扩展性变得更高,可读性更好。
或许看完这些你还是存在疑问,工厂模式不也可以实现同样的效果吗,把创建不同的类改成创建同一个类,这不就没区别了吗?对呀,没区别。把工厂模式进行这样改动不就是变成创建者模式了吗,所以这样就是创建者模式而不是工厂模式了。
总结
这两总模式大同小异,内核都差不多,我个人理解为写法不同名字不同而已,比如图一的写法就是工厂模式,图二的写法就是建造者模式。同时他们都属于创建型模式,也就是往大了说他们就是一样的。