您的位置:首页 > 房产 > 建筑 > 怎么建立一个网站八字测试_机械加工接单平台_产品品牌推广策划方案_四川专业网络推广

怎么建立一个网站八字测试_机械加工接单平台_产品品牌推广策划方案_四川专业网络推广

2025/5/7 2:48:33 来源:https://blog.csdn.net/weixin_47612420/article/details/145937099  浏览:    关键词:怎么建立一个网站八字测试_机械加工接单平台_产品品牌推广策划方案_四川专业网络推广
怎么建立一个网站八字测试_机械加工接单平台_产品品牌推广策划方案_四川专业网络推广

建造者模式

建造者模式的目的在于分步骤构造复杂对象,通过将对象构建过程与其表示分离,使得同样的构造过程可以创建不同的对象形态。

特点

  • 解耦构建与装配:将对象的创建步骤抽象为独立的构造器
  • 灵活扩展:允许通过不同的具体建造者生成不同表现形式的对象

模式结构

角色职责
抽象建造者(Builder)定义创建产品实例的各个部件的抽象接口
具体建造者(ConcreteBuilder)实现抽象建造者所定义的接口,创建一个复杂对象的各个部件
指挥者(Director)控制构建流程,按顺序调用抽象建造者所定义的接口方法,完成复杂对象的创建
产品(Product)由复杂对象的各个部件组成

要辨别是否套用了建造者模式,只需要确认是否存在上述4个角色。

简单示例


class Car:                                             # 产品def __init__(self):self.engine = Noneself.wheels = Nonedef __str__(self):return f'Engine: {self.engine}, Wheels: {self.wheels} \n'class AbstractCarBuilder:                             # 抽象建造者def build_engine(self): passdef build_wheels(self): passdef get_car(self): passclass SuvCarBuilder(AbstractCarBuilder):              # 具体建造者def __init__(self):self.car = Car()def build_engine(self):self.car.engine = 'V6 turbo'def build_wheels(self):self.car.wheels = 'mikilin'def get_car(self): return self.carclass Director:                                       # 指挥者def construct(self, builder: AbstractCarBuilder):builder.build_engine()builder.build_wheels()return builder.get_car()# 使用示例
director = Director()
builder = SuvCarBuilder()
my_car = director.construct(builder)
print(my_car)   # Engine: V6 turbo,Wheels: mikilin

应用场景

  • 参数复杂的对象:当对象需要多个初始化参数
  • 多形态的对象:当对象的表现形式有很多种
  • 构造复杂但形式一致的对象:当对象的创建过程需要根据参数的不同而变化

优缺点

  • 优点
    • 封装性好,构建和表示分离
    • 构建过程明确
    • 符合单一职责原则
  • 缺点
    • 代码复杂,多类协同
    • 创建过程复杂,需要控制流程

建造者模式 VS 工厂模式

对比点建造者模式工厂模式
适用场景对象内部构建复杂不同类别对象,但流程一致
创建过程创建过程复杂,需要控制创建过程简单,不需要控制
扩展方向扩展产品构造方式(纵向型)增加产品种类(横向型)

总而言之,在使用上看处理的是多类型对象还是一个类型的复杂对象,如果是后者,使用工厂模式,如果是前者,使用建造者模式。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com