微信官方网站注册,如何将自己做的网站放到网上去,益阳网页设计,做室内设计兼职的网站#x1f3c6;本文收录于《聊设计模式》专栏#xff0c;专门攻坚指数级提升#xff0c;助你一臂之力#xff0c;带你早日登顶#x1f680;#xff0c;欢迎持续关注收藏订阅#xff01; 前言 设计模式是众多优秀软件开发实践的总结和提炼#xff0c;…
本文收录于《聊设计模式》专栏专门攻坚指数级提升助你一臂之力带你早日登顶欢迎持续关注收藏订阅 前言 设计模式是众多优秀软件开发实践的总结和提炼是软件工程中不可或缺的重要内容。其中建造者模式是一种非常常用的设计模式本文将介绍建造者模式的概念、结构、应用场景、代码实现以及测试用例。
摘要 建造者模式是一种对象创建型设计模式。它将复杂对象的构建过程分离出来使得同样的构建过程可以创建不同的表示。通过该模式可以将一个复杂对象的构建与其表示分离使得同样的构建过程可以创建不同的表示。通过该模式可以减少构建过程中的重复代码提高代码的重用性和可维护性。
建造者模式
何为建造者模式 建造者模式是一种对象创建型设计模式它将复杂对象的构建过程分离出来使得同样的构建过程可以创建不同的表示。该模式将构建对象的过程分为若干个部分分别进行构建最终通过一个指挥者将这些部分组装成一个完整的对象。该模式可以解决复杂对象的创建和表示问题同时可以提高代码的重用性和可维护性。
结构
建造者模式包含如下几个角色
Product产品表示要创建的复杂对象。Builder抽象建造者定义创建产品各个部分的抽象接口。ConcreteBuilder具体建造者实现抽象建造者接口完成产品的各个部分的构建。Director指挥者负责构建产品的对象指挥具体建造者进行产品的构建。
建造者模式的结构图如下所示 应用场景
建造者模式适用于以下场景
创建对象的算法应该独立于组成部分以及它们的装配方式时。同一个构建过程有不同的表示时。需要创建一些复杂的对象但是它们的部分构造过程必须有一定的顺序时。需要在对象创建过程中进行更加精细的控制时。
建造者模式的优缺点
优点
将对象的构建与表示分离使得同样的构建过程可以创建不同的表示增加了程序的灵活性将复杂对象的构造代码与表示代码分开易于维护隐藏了对象构建的细节使得构建代码与表示代码分离提高了代码的可读性和可维护性可以对不同的具体建造者进行更换和扩展。
缺点
由于需要定义抽象建造者和具体建造者类因此建造者模式增加了系统的类的个数导致系统更加庞大。
建造者模式的示例
以下是建造者模式的代码实现以Java语言为例
产品(Product)
package com.example.javaDesignPattern.builder;/*** 产品** Author bug菌* Date 2023-09-19 0:00*/
public class Product {private String partA;private String partB;private String partC;public String getPartA() {return partA;}public void setPartA(String partA) {this.partA partA;}public String getPartB() {return partB;}public void setPartB(String partB) {this.partB partB;}public String getPartC() {return partC;}public void setPartC(String partC) {this.partC partC;}public String toString() {return PartA: partA , PartB: partB , PartC: partC;}
}抽象建造者(Builder)
package com.example.javaDesignPattern.builder;/*** 抽象建造者(Builder)** Author bug菌* Date 2023-09-19 0:03*/
public interface Builder {void buildPartA();void buildPartB();void buildPartC();Product getResult();
}具体建造者(ConcreteBuilder )
package com.example.javaDesignPattern.builder;/*** 具体建造者(ConcreteBuilder )** Author bug菌* Date 2023-09-19 0:03*/
public class ConcreteBuilder implements Builder {private Product product new Product();public void buildPartA() {product.setPartA(A);}public void buildPartB() {product.setPartB(B);}public void buildPartC() {product.setPartC(C);}public Product getResult() {return product;}
}指挥者(Director)
package com.example.javaDesignPattern.builder;/*** 指挥者(Director)** Author bug菌* Date 2023-09-19 0:03*/
public class Director {public void construct(Builder builder) {builder.buildPartA();builder.buildPartB();builder.buildPartC();}
}代码方法介绍
Product类表示要创建的复杂对象。该类包含了对象的各个部分并提供了设置和获取各个部分的方法。Builder接口定义创建产品各个部分的抽象接口。包含了创建每个部分的抽象方法以及获取最终产品的方法。ConcreteBuilder类实现Builder接口完成产品的各个部分的构建。Director类负责构建产品的对象指挥具体建造者进行产品的构建。该类包含了构建产品的算法。
测试用例
以下是建造者模式的测试用例
package com.example.javaDesignPattern.builder;/*** Author bug菌* Date 2023-09-19 0:05*/
public class BuilderPattern {public static void main(String[] args) {Director director new Director();Builder builder new ConcreteBuilder();director.construct(builder);Product product builder.getResult();System.out.println(product.getPartA());System.out.println(product.getPartB());System.out.println(product.getPartC());System.out.println(product.toString());}
}
测试结果如下 测试用例代码解读 这是一个实现Builder设计模式的示例代码。Builder模式的目的是将对象的构建过程与表示分离从而使同样的构建过程可以创建出不同的表示形式。下面是代码的解读
首先定义了一个 Builder 接口ConcreteBuilder 类实现了 Builder 接口。Product 类是最终要构建的对象。Director 类是建造者模式中的指挥者用于构造 Product 对象。在 main 方法中先创建了一个 ConcreteBuilder 对象在调用 Director 的 construct 方法时传入该 builder。Director 会调用 ConcreteBuilder 的具体方法来构造 Product。最后通过 getResult 方法获取 Product 对象并输出其三个部分的值以及使用 toString 方法输出 Product对象的所有属性。 这个建造者模式的示例比较简单但是建造者模式常用于构建较为复杂的对象例如生成 HTML 页面、构建复杂的数据库查询等。通过建造者模式可以降低对象构建的复杂度使代码更易于维护。
小结 本文介绍了建造者模式的概念、结构、应用场景和代码实现。在建造者模式中将复杂对象的构建过程分离出来使得同样的构建过程可以创建不同的表示。通过该模式可以减少构建过程中的重复代码提高代码的重用性和可维护性。建造者模式适用于复杂对象的创建和表示问题以及需要更加精细的控制的场景。在代码实现中需要定义产品类、抽象建造者接口、具体建造者类和指挥者类分别完成产品的各个部分的构建和产品的组装。最后通过测试用例验证建造者模式的正确性。
附录源码 如上涉及代码均已上传同步在GitHub提供给同学们参考性学习。
总结 建造者模式是一种非常常用的设计模式它将复杂对象的构建过程分离出来使得同样的构建过程可以创建不同的表示。通过该模式可以减少构建过程中的重复代码提高代码的重用性和可维护性。该模式适用于复杂对象的创建和表示问题以及需要更加精细的控制的场景。在实际开发中建议合理运用建造者模式提高代码的质量和可维护性。
☀️建议/推荐你 如果想系统性的全面学习设计模式建议小伙伴们直接毫无顾忌的关注这个专栏《聊设计模式》无论你是想提升自己的编程技术还是渴望更好地理解代码背后的设计思想本专栏都会为你提供实用的知识和启发帮助你更好地解决日常开发中的挑战将代码变得更加优雅、灵活和可维护
关于我 我是bug菌CSDN | 掘金 | infoQ | 51CTO 等社区博客专家历届博客之星Top30掘金年度人气作者Top4051CTO年度博主Top12华为云 | 阿里云| 腾讯云等社区优质创作者全网粉丝合计15w 硬核微信公众号「猿圈奇妙屋」欢迎你的加入免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。