医院网站建设山东,网站如何吸引,深圳住房与建设网站,凡科专属网站免费注册目录
1、什么是建造者Builder模式#xff1f;
2、建造者Builder模式的利与弊
3、建造者Builder模式的应用场景
4、建造者模式中的指导者#xff08;Director#xff09;有什么作用#xff1f;
5、建造者Builder模式与其他模式的关系
小结 1、什么是建造者Builder模式…目录
1、什么是建造者Builder模式
2、建造者Builder模式的利与弊
3、建造者Builder模式的应用场景
4、建造者模式中的指导者Director有什么作用
5、建造者Builder模式与其他模式的关系
小结 1、什么是建造者Builder模式
Builder模式是一种创建型设计模式用于将复杂对象的构建过程和表示分离使得同样的构建过程可以创建不同的表示。建造者模式又称为生成器模式主要用于对复杂对象的构建及初始化它可以将多个简单的组件对象按顺序一步步组装起来最终完成一个复杂的成品对象。与工厂系列模式不同的是建造者模式的主要目的在于把烦琐的构建过程从不同对象中抽离出来使其脱离并独立于产品类与工厂类最终实现用同一套标准的制造工序能够产出不同的产品。
在生活中一个常见的例子是建筑领域的房屋建造。我们可以将房屋的建造过程看作是使用Builder模式来创建房屋对象的过程。
假设我们需要建造一座房子房子由多个组成部分例如地基、楼层、墙壁、窗户等组成并且每个部分都有多个属性例如地基的深度、楼层的高度、墙壁的材料等。 使用Builder模式我们可以定义一个HouseBuilder类作为建造者它负责创建和组装房子的各个部分。HouseBuilder类可以有一些方法来设置房子的各个属性例如setFoundationDepth(int depth)、setFloorHeight(int height)等。 另外我们还可以定义一个House类作为最终构建的产品。House类包含了房子的所有属性并提供了访问这些属性的方法。 下面是一个简化的示例代码
// 房子类
public class House {private int foundationDepth;private int floorHeight;private String wallMaterial;// 构造函数和访问方法省略// ...
}// 建造者类
public class HouseBuilder {private House house;public HouseBuilder() {house new House();}public void setFoundationDepth(int depth) {house.setFoundationDepth(depth);}public void setFloorHeight(int height) {house.setFloorHeight(height);}public void setWallMaterial(String material) {house.setWallMaterial(material);}public House build() {return house;}
}// 使用Builder模式创建房子对象
public class Main {public static void main(String[] args) {HouseBuilder builder new HouseBuilder();builder.setFoundationDepth(10);builder.setFloorHeight(3);builder.setWallMaterial(Brick);House house builder.build();// 使用房子对象进行后续操作// ...}
}在上述示例中HouseBuilder类负责创建和设置房子的各个属性最后通过build()方法返回构建好的House对象。这样我们可以根据需要灵活地设置房子的各个部分并且可以通过调用build()方法来获取最终的房子对象。
建造者模式的结构图示 图片来源设计模式-生成器Builder - 知乎 图片来源设计模式-生成器Builder - 知乎 2、建造者Builder模式的利与弊
Builder模式具有以下优点 隔离复杂对象的构建过程Builder模式将复杂对象的构建过程与其表示分离使得可以独立地构建不同表示的对象。这样可以简化构建过程提高可读性和维护性。 提供灵活的构建方式通过定义不同的Builder或者使用方法链式调用可以按需设置对象的各个属性从而灵活地构建对象。可以根据需要组合不同的属性生成不同的对象实例。 支持构建过程的逐步完善Builder模式可以支持逐步完善构建过程即在Builder中逐步添加设置方法最后调用build方法返回最终的对象。这种方式可以方便地扩展构建过程适应不同的需求。 避免构造函数参数过多当一个类的构造函数参数过多时使用Builder模式可以避免构造函数的参数列表过长提高代码的可读性。
Builder模式的一些缺点 增加了类的复杂度引入了Builder类和多个setter方法增加了类的复杂度和代码量。 对象构建过程的冗余Builder模式会创建一个Builder对象来构建目标对象可能会导致额外的对象创建开销。 不适用于简单对象如果目标对象的属性较少构建过程相对简单使用Builder模式可能不是最优选择会增加代码量和复杂度。
需要根据具体情况来权衡使用Builder模式的利弊。在复杂对象的构建过程中特别是当对象具有大量属性或者构建过程需要逐步完善时Builder模式可以提供一种灵活、可读性高的解决方案。 3、建造者Builder模式的应用场景 构建复杂对象当需要构建的对象具有多个属性并且构建过程较为复杂时可以考虑使用Builder模式。例如构建包含大量配置选项的文档生成器、图形界面中的复杂组件等。 避免重叠构造函数当一个类需要多个构造函数来支持不同的对象初始化方式时可以使用Builder模式来避免创建过多的重叠构造函数并提供更清晰的对象构建方法。 创建不可变对象当需要创建不可变Immutable对象时Builder模式可以很好地与不可变对象的设计原则结合通过Builder来设置对象的属性最终构建出不可变的对象实例。 流式接口Fluent InterfaceBuilder模式可以用于创建流式接口使得客户端代码可以使用链式调用的方式来设置对象的属性从而提高代码的可读性和简洁性。 多个构建过程当需要支持多种构建过程或者需要逐步完善构建过程时Builder模式可以提供一种灵活的解决方案支持根据不同需求构建不同表示的对象。
总的来说Builder模式适用于需要构建复杂对象、有多个可选参数或需要逐步完善构建过程的情况。通过使用Builder模式可以将对象的构建过程分离出来提高灵活性和可读性。 4、建造者模式中的指导者Director有什么作用
在建造者模式中指导者Director起到了协调和组织的作用。它负责控制构建过程按照特定的顺序调用建造者的方法来构建对象。
指导者的主要作用有以下几点 定义构建顺序指导者确定了构建过程中各个步骤的顺序和调用方式。它知道哪些方法应该在何时被调用以保证对象的正确构建。 解耦客户端与具体构建过程指导者将构建对象的过程封装起来并与具体的建造者解耦。客户端不需要直接与建造者进行交互而是通过指导者来完成对象的构建。 简化客户端代码指导者隐藏了构建细节使得客户端可以更简洁地调用构建过程。客户端只需要与指导者进行交互并传递必要的参数而无需关心具体的构建过程。
指导者的实现原理通常是通过将建造者作为参数进行注入并在内部调用建造者的方法来完成构建过程。指导者根据具体需求和建造者的能力来决定调用哪些方法以及调用顺序。
具体实现上指导者可以提供一个统一的构建方法接收建造者作为参数并按照预定的顺序调用建造者的方法来构建对象。也可以根据需要提供一系列的构建方法每个方法负责调用建造者的特定方法以完成特定的构建步骤。
通过指导者的存在客户端可以更简单地调用构建方法而无需关心具体的构建细节和顺序从而实现了构建过程的解耦和简化。 5、建造者Builder模式与其他模式的关系
该片段引自Builder
1. 许多设计从使用Factory方法不那么复杂通过子类更可定制开始并向抽象工厂、原型或生成器更灵活但更复杂发展。 2. Builder专注于逐步构建复杂的对象。抽象工厂专门创建相关对象的族。Abstract Factory会立即返回产品而Builder允许在获取产品之前运行一些额外的构造步骤。 3. 在创建复杂的复合树时可以使用Builder因为可以对其构建步骤进行编程以递归工作。 4. 您可以将Builder和Bridge结合起来director类扮演抽象的角色而不同的构建器充当实现。 5. 抽象工厂、构建者和原型都可以实现为Singleton。 小结
Builder 模式的关键是其中的 Director 对象并不直接返回对象而是通过分步进行对象的创建。在这里 Director 可以提供一个默认的返回对象的接口即返回通用的复杂对象的创建不指定或者特定唯一指定BuildPart中的参数。
通过使用Builder模式可以避免在构造函数或者setter方法中传入大量参数并且可以更加清晰地组织和管理复杂对象的构建过程。 参考
精讲设计模式-Builder模式-CSDN博客
设计模式-生成器Builder - 知乎
大白话建造者模式(Builder Pattern) - 张有路 - 博客园
Builder
设计模式系列3 - builder模式 - 知乎 感谢阅读码字不易多谢点赞如有不当之处欢迎反馈指出感谢