千家信息网

怎么理解Java设计模式的建造者模式

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,本篇内容介绍了"怎么理解Java设计模式的建造者模式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一
千家信息网最后更新 2025年11月16日怎么理解Java设计模式的建造者模式

本篇内容介绍了"怎么理解Java设计模式的建造者模式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、什么是建造者模式

建造者模式也称生成器模式 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(依赖倒转)

产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。

抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。

建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。

指挥类:负责调用适当的建造者来组建产品,指挥类一般不与产品类发生依赖关系,与指挥类直接交互的是建造者类。一般来说,指挥类被用来封装程序中易变的部分。

二、建造者模式的应用场景

1.创建复杂对象的算法独立于组成对象的部件

2.同一个创建过程需要有不同的内部表象的产品对象

例子:建房子,不管建什么房子,它们都离不开地基、柱子、层面和墙体这些组成部分,建筑工人就是把这些组成部分一个个建起来,最后连成一体建出一栋栋楼房。

三、建造者模式的优缺点

优点

1.客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。

2.每一个具体建造者都独立,因此可以方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 。

3.可以更加精细地控制产品的创建过程 。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。

4.增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合"开闭"。

缺点

1.当建造者过多时,会产生很多类,难以维护。

2.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,若产品之间的差异性很大,则不适合使用该模式,因此其使用范围受到一定限制。

3.若产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

四、工厂模式和建造者模式的对比

工厂模式用于处理 如何获取实例对象 问题,建造者模式用于处理如何建造实例对象 问题

建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个"指挥类"的角色。在建造者模式的类图中,假如把这个指挥类看做是最终调用的客户端,那么剩余的部分就可以看作是一个简单的工厂模式了。

与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类--指挥类。

也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给指挥类。由指挥类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。

五、建造者模式的实现

Product类---产品类,由多个部件组成

//Product类,由多个部件组成public class Product{    List parts = new List();    //添加产品部件    public void Add(string part)    {        parts.Add(part);    }     public void show()    {        Console.WriteLine("\n  创建产品");        foreach (var item in parts)        {            Console.WriteLine("item");        }    }}

Builder类---抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult

abstract class Builder{    public abstract void BuilderPartA();    public abstract void BuilderPartB();    public abstract Product GetResult();}

具体建造者类

//ConcreteBuilder1类---具体建造者类class ConcreteBuilder1 : Builder{    private Product product = new Product();    //建造具体的两个部件    public override void BuilderPartA()    {        product.Add("部件A");    }     public override void BuilderPartB()    {        product.Add("部件B");    }     public override Product GetResult()    {        return product;    }}//ConcreteBuilder2类---具体建造者类class ConcreteBuilder2 : Builder{    private Product product = new Product();    //建造具体的两个部件    public override void BuilderPartA()    {        product.Add("部件X");    }     public override void BuilderPartB()    {        product.Add("部件Y");    }     public override Product GetResult()    {        return product;    }}

Director类---指挥者类

class Director{    public void Construct(Builder builder)    {        //用来指挥建造过程        builder.BuilderPartA();        builder.BuilderPartB();    }}

客户端代码---客户不需知道具体的建造过程

static void Main(string[] args){    Director director = new Director();    Builder b1 = new ConcreteBuilder1();    Builder b2 = new ConcreteBuilder2();     //指挥者用ConcreteBuilder1方法建造产品    director.Construct(b1);    Product p1 = b1.GetResult();    p1.show();     //指挥者用ConcreteBuilder2方法建造产品    director.Construct(b2);    Product p2 = b2.GetResult();    p2.show();     Console.Read();}

"怎么理解Java设计模式的建造者模式"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

模式 产品 过程 对象 指挥 部件 工厂 复杂 不同 品类 客户 方法 客户端 部分 两个 指挥者 代码 多个 组成部分 独立 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 摩尔庄园第一服务器 大学计算机网络技术课件 网络技术语言编程 数据库的select会加事务吗 漳州卓晟互联网科技有限公司 网络安全报告 勒索 广州华为信息与网络技术学院 化妆品软件开发计划书 百东网络技术有限公司怎么样 公司服务器分配个人电脑 学校网络安全生产月系列 重庆便民平台软件开发电话 小安网络安全服务市场 连不上阿里云数据库 青岛海微软件开发有限公司 mvc添加图片到数据库 信息化网络技术建设规划 软件开发切片是啥意思 mysql数据库设置库大小 欧盟网络安全现状 部队网络安全保密防范新闻稿 饥荒联机版没法启动服务器 软件开发用户界面c# 天津软件开发中心笔试内容 美国2011年出台网络安全文件 sql图片存储数据库类型 无线网络技术教程第二版 网络技术在幼儿园科学教育中 互联网是商业创新还是科技创新 云服务器任务管理器打不开
0