Python设计模式——建造者模式

建造者模式

建造者模式:
将一个复杂对象的构造表示分离,同样的构建过程可以创建不同的东西。

建造者模式与抽象工程模式相似,也用来创建复杂对象

主要区别是建造者模式着重一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象。

角色:

抽象建造者:定义抽象类
具体建造者:定义具体建造者类
指挥者:导演类,在里面封装构建产品的过程
产品 : 要建造的产品类

优点:

隐藏了一个产品的内部结构、装配过程和顺序

将构造代码与表示代码分开,可以对构造过程进行更加精细的控制

python代码实现:

from abc import ABCMeta, abstractmethod


class Person(metaclass=ABCMeta):
    """
    产品类
    """

    def __init__(self, age=None, gender=None, height=None, weight=None):
        self.age = age
        self.gender = gender
        self.height = height
        self.weight = weight

    def __str__(self):
        return f"年龄:{
      
      self.age}, 性别:{
      
      self.gender}, 身高:{
      
      self.height}, 体重:{
      
      self.weight}"


class BuilderPerson(metaclass=ABCMeta):
    """
    抽象建造者类
    """

    @abstractmethod
    def build_age(self):
        pass

    @abstractmethod
    def build_gender(self):
        pass

    @abstractmethod
    def build_height(self):
        pass

    @abstractmethod
    def build_weight(self):
        pass


class BuildYoungWomanPerson(BuilderPerson):
    """
    实际的产品类
    """

    def __init__(self):
        self.person = Person()

    def build_age(self):
        self.person.age = "18"

    def build_gender(self):
        self.person.gender = "女"

    def build_height(self):
        self.person.height = "1.7m"

    def build_weight(self):
        self.person.weight = "50kg"


class BuildOldManPerson(BuilderPerson):
    """
    实际的产品类
    """

    def __init__(self):
        self.person = Person()

    def build_age(self):
        self.person.age = "60"

    def build_gender(self):
        self.person.gender = "男"

    def build_height(self):
        self.person.height = "1.8m"

    def build_weight(self):
        self.person.weight = "70g"


class PersonDirector:
    """
    指挥者类,描述产品构建的细节
    """

    def build_person(self, builder: BuilderPerson):
        builder.build_age()
        builder.build_gender()
        builder.build_height()
        builder.build_weight()
        return builder.person


# 高层代码:
# 创建年轻的女人
builder1 = BuildYoungWomanPerson()
hd = PersonDirector()
p = hd.build_person(builder1)
print(p)

# 创建老男人
builder2 = BuildOldManPerson()
hd2 = PersonDirector()
p2 = hd2.build_person(builder2)
print(p2)


# 输出
================================
年龄:18, 性别:, 身高:1.7m, 体重:50kg
年龄:60, 性别:, 身高:1.8m, 体重:70g

猜你喜欢

转载自blog.csdn.net/weixin_45455015/article/details/127526446