美文网首页设计模式学习
设计模式:建造者模式

设计模式:建造者模式

作者: 狄仁杰666 | 来源:发表于2022-03-02 23:32 被阅读0次

前言

来啦老铁!

笔者正在学习常见的设计模式,且将设计模式系列学习文章归入 “设计模式学习” 专题,赶快关注专题一起学习吧!

今天我们继续学习:

  • 建造者模式

备注:笔者的学习资料大部分来源于:菜鸟教程

学习路径

  1. 建造者模式简介;
  2. 建造者模式代码实现;
  3. 建造者模式优缺点分析;
  4. 建造者模式使用场景介绍;

1. 建造者模式简介;

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

  • 意图:
    将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

  • 主要解决:
    主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。

  • 何时使用:
    一些基本部件不会变,而其组合经常变化的时候。

  • 如何解决:
    将变与不变分离开。

  • 关键代码:
    建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

2. 建造者模式代码实现;

我们以生产不同汽车为例,比如生产宝马汽车、奔驰汽车,宝马 1 系,宝马 7 系等。

1. 抽象汽车,创建汽车类 car.py;

class Car:
    def __init__(self):
        pass

    def build_framework(self):
        raise NotImplementedError()

    def install_windows(self):
        raise NotImplementedError()

    def install_tires(self):
        raise NotImplementedError()

    def install_branding(self):
        raise NotImplementedError()

    def prize(self):
        raise NotImplementedError()

2. 实现建造者;

  • 宝马汽车建造者 bmwBuilder.py;
from car import Car


class BmwBuilder(Car):
    def __init__(self):
        super().__init__()

    def build_framework(self):
        print("Benz framework")

    def install_windows(self):
        print("Benz windows")

    def install_tires(self):
        print("Benz tires")

    def install_branding(self):
        print("Benz branding")

    def prize(self):
        print("The mean prize of BMW is 20w")

    def create_bmw_1(self):
        self.build_framework()
        self.install_windows()
        self.install_tires()
        print("The prize of BMW 1 is 20w")

    def create_bmw_7(self):
        self.build_framework()
        self.install_windows()
        self.install_tires()
        print("The prize of BMW 7 is 80w")

  • 奔驰汽车建造者 benzeBuilder.py;
from car import Car


class BenzBuilder(Car):
    def __init__(self):
        super().__init__()

    def build_framework(self):
        print("Benz framework")

    def install_windows(self):
        print("Benz windows")

    def install_tires(self):
        print("Benz tires")

    def install_branding(self):
        print("Benz branding")

    def prize(self):
        print("The mean prize of Benz is 30w")

注意:在这里,我们为了演示实例的多样性,除了提供宝马汽车、奔驰汽车,还在宝马汽车内提供 1 系、7 系的实例;

  • 创建指挥者 director.py
from bmwBuilder import BmwBuilder
from benzBuilder import BenzBuilder


class Director:
    def __init__(self):
        self.builder = None

    def build(self):
        [step() for step in
         (self.builder.build_framework, self.builder.install_windows, self.builder.install_tires,
          self.builder.install_branding, self.builder.prize)]

    def build_bmw_1(self):
        self.builder.create_bmw_1()

    def build_bmw_7(self):
        self.builder.create_bmw_7()


if __name__ == "__main__":
    print("BMW:")
    director = Director()
    director.builder = BmwBuilder()
    director.build()
    print("--------------------")

    print("BMW 1:")
    director.build_bmw_1()
    print("--------------------")

    print("BMW 7:")
    director.build_bmw_7()
    print("--------------------")

    print("Benz:")
    director = Director()
    director.builder = BenzBuilder()
    director.build()

3. 运行 director.py;

我们会看到控制台打印出:

BMW:
Benz framework
Benz windows
Benz tires
Benz branding
The mean prize of BMW is 20w


BMW 1:
Benz framework
Benz windows
Benz tires
The prize of BMW 1 is 20w


BMW 7:
Benz framework
Benz windows
Benz tires
The prize of BMW 7 is 80w


Benz:
Benz framework
Benz windows
Benz tires
Benz branding
The mean prize of Benz is 30w

综上,使用建造者模式,我们可以指定建造者,由指挥者指挥建造者创建出指定的对象,当我们对宝马汽车未来有了拓展,例如宝马 10 系,则只需要创建新的建造者交由指挥者控制,这样就能达到易拓展的目的。

当然,如果内部变化很多,则需要很多建造者,也即需要很多建造者类,这也是这个模式的弊端~

3. 建造者模式优缺点分析;

  • 优点:

  1. 建造者独立,易扩展;
  2. 便于控制细节风险;
  • 缺点:

  1. 产品必须有共同点,范围有限制;
  2. 如内部变化复杂,会有很多的建造类;

4. 建造者模式使用场景介绍;

  1. 去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐";
  2. JAVA 中的 StringBuilder;
好了,今天就简单学到这吧,我也将在工作中不断学习、实践该设计模式,有新的认知也会做更新,也欢迎读者指正,感谢~

如果本文对您有帮助,麻烦点赞、关注!

谢谢!

相关文章

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

  • 一篇文章搞懂设计模式

    目录 面向对象的七种设计原则建造者模式命令模式享元模式模板方法模式责任链模式建造者模式原型模式观察者模式策略模式与...

网友评论

    本文标题:设计模式:建造者模式

    本文链接:https://www.haomeiwen.com/subject/dahpcrtx.html