建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。
建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。
实用范围
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同表示时。
举个简单的例子,如汽车,有很多部件,车轮,方向盘,发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一部汽车,这个装配过程也很复杂(需要很好的组装技术), builder模式就是为了将部件和组装分开。
在这样的设计模式中,有以下几个角色:
1、Builder:为创建一个产品对象的各个部件指定抽象接口。
2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
3、Director:构造一个使用Builder接口的对象,指导构建过程。
4、Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
建造者模式
从上图可以看出Builder是为创建一个Product对象的各个部件指定的抽象接口,Prodcut是具体的产品。Director是一个建造者,由它指挥使用BUilder。ConcreteBuilder是具体的建造,实现Builder接口的各个方法。
总结一下:
Builder 模式的优点:
-
将一个复杂对象的创建过程封装起来,使得客户端不必知道产品内部组成的细节;
-
允许对象通过多个步骤来创建,并且可以改变过程和选择需要的过程;
-
产品的实现可以被替换,因为客户端只看到一个抽象的接口;
-
创建者独立,容易扩展。
Builder 模式缺点:
-
会产生多余的 Builder 对象以及 Director 对象,消耗内存;
-
与工厂模式相比,采用 Builder 模式创建对象的客户,需要具备更多的领域知识。
欢迎大家指出不足之处,供大家交流进步,麻烦大家多多评论和关注我,想了解更多,公众平台:程序传说哥