🎨设计模式:建造者模式
00 分钟
2023-7-12
2023-11-23
type
status
date
slug
summary
tags
category
icon
password
Email
💓
水清月冷,香消影瘦,人立黄昏。——吴文英《极相思·题陈藏一水月梅扇》
🔆
文章首发于我的个人博客:欢迎大佬们来逛逛
🔆
设计模式项目地址:C++ Java python实现

建造者模式

建造者模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
官方说法就是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。

创建者模式的使用场景

主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成。
  • 需要生成的对象具有复杂的内部结构
  • 需要生成的对象内部属性本身相互依赖

建造者模式实现步骤

1.提供抽象建造者类: 为创建产品各个部分,统一抽象接口
2.提供具体建造者类:具体实现抽象建造者各个部件的接口
3.提供一个或多个具体产品类:具体的创建产品的各个部分
4.提供一个指挥类:负责安排和调度复杂对象的各个建造过程
notion image

案例

实现建造不同电脑的过程:
  • 联想电脑
  • 苹果电脑
对于电脑我们规定其具有两个必须的属性,即cpuram,以及四个不是必须的属性mousekeyboarddisplayhost
我们可以把创建他们两个电脑的过程抽象出来,对于不是必须的属性,我们在创建对象时无须指定,只需传递必须的两个参数即可,这就用到了建造者模式
类:
  • 产品类:Computer,指定电脑所具有的所有属性,并且提供set方法,注意必要属性必须设置为构造函数的形式。
  • 抽象建造者类:AbstractComputerBuilder,负责对象的创建过程,提供set属性的无参抽象方法提供一个返回子类指针对象的接口
  • 具体建造者类:Mac/LenovoComputerBuilder,具体设置其必要与非必要属性值,实现父类抽象方法
  • 监督者:Director:负责监督创建。
notion image

总结

优点
  • 封装性好,构建和表示分离
  • 扩展性好,各个具体的建造者相互独立,有利于系统的解耦
  • 控制细节风险,客户端无需详知细节,建造者细化创建过程
缺点
  • 产品的组成部分必须相同,这限制了其使用范围
  • 产品内部发生变化,建造者需同步修改,后期维护成本较大
 

评论
  • Twikoo
  • Valine