• 4.Python建造者模式


    1.定义

    12
    定义使用多个简单的对象一步一步构建成一个复杂的对象
    应用场景1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐
    角色抽象建造者(Builder)
    具体建造者(Concrete Builder)
    指挥者(Director)
    产品(product)
    优点1.隐藏了一个产品的内部结构和装配过程
    2.将构造代码与表示代码分开
    3.可以对构造过程进行更精细的控制
    注意建造者模式与抽象工厂模式相似,也是用来创建复杂对象,主要是建造者模式着重一步一步构造复杂的对象,而抽象工厂模式着重于多个系列的产品对象
    缺点1、产品必须有共同点,范围有限制。
    2、如内部变化复杂,会有很多的建造类。

    2.示例

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    from abc import abstractmethod, ABCMeta
    
    
    # 产品
    class Player:
        def __init__(self, face=None, body=None, arm=None, leg=None):
            self.face = face
            self.body = body
            self.arm = arm
            self.leg = leg
    
        def __str__(self):
            return "%s,%s,%s,%s" % (self.face, self.body, self.arm, self.leg)
    
    
    # -----抽象创建者-----
    class PlayerBuilder(metaclass=ABCMeta):
        @abstractmethod
        def build_body(self):
            pass
    
        @abstractmethod
        def build_face(self):
            pass
    
        @abstractmethod
        def build_arm(self):
            pass
    
        @abstractmethod
        def build_leg(self):
            pass
    
    
    # -----具体创建者-----
    class SexyGirlBuilder(PlayerBuilder):
        def __init__(self):
            self.player = Player()
    
        def build_body(self):
            self.player.body = "好的身体"
    
        def build_face(self):
            self.player.face = "好的脸蛋"
    
        def build_arm(self):
            self.player.arm = "好的手臂"
    
        def build_leg(self):
            self.player.leg = "好的腿"
    
    
    class MonsterBuilder(PlayerBuilder):
        def __init__(self):
            self.player = Player()
    
        def build_body(self):
            self.player.body = "不好的身体"
    
        def build_face(self):
            self.player.face = "不好的脸蛋"
    
        def build_arm(self):
            self.player.arm = "不好的手臂"
    
        def build_leg(self):
            self.player.arm = "不好的腿"
    
    
    # -----指挥者-----
    class PlayerDirector:
        @staticmethod
        def build_player(builder):
            builder.build_body()
            builder.build_face()
            builder.build_arm()
            builder.build_leg()
            return builder.player
    
    
    if __name__ == '__main__':
        # client
        builder1 = SexyGirlBuilder()
        director = PlayerDirector()
        p = director.build_player(builder1)
        print(p)
       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    3.总结

  • 相关阅读:
    前端面试题
    Ansys(Maxwell、Simplorer)与Simulink联合仿真入门
    基于java菜篮子系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
    纸牌游戏设计制作《摸鱼2》(C语言)
    Java多线程(4)----浅谈重入锁
    彻底删除git历史记录中的文件
    springboot项目打包成exe文件
    vue3使用v-model控制子组件进行双向数据绑定
    python接口自动化-参数关联
    【MySql】MySQL概述及其语法概述
  • 原文地址:https://blog.csdn.net/weixin_44689630/article/details/126450309