构建者(建造者)模式

引子

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

概念

构建者模式是一个独特的设计模式,有助于使用简单的对象构造复杂的对象平使用算法。

类图

例子分析

例如手机,它是由 屏幕 ,主板,处理器等等组成的,但是组成手机的这些各个部分是可变的。

不同的型号的手机所采用的这些组件都是不一样的;如处理器有 联发科 、 高通 、 英伟达 等等。

同理主板与手机屏目也是这样。

复杂对象

在这例子中复杂的对象指的是手机这东西,它是由多个子对象组成的。

变化部分

变化的部分指的是组成手机这对象的各个子对象,它们是可变的。

如处理器有 联发科 、 高通 、 英伟达 等等。

算法部分

假设手机都是构造是这样:主板->处理器-> 屏幕 ->完成

主板上安装处理器然后在装上屏幕一个手机就这样构造完成了。

实现代码

class Mobile:
    def __init__(self):
        self.__cpu = None
        self.__screen = None
        self.__master = None

    def set_cpu(self, value):
        self.__cpu = value

    def set_screen(self, value):
        self.__screen = value

    def set_master(self, value):
        self.__master = value

    def __repr__(self):
        return f' '


class AbsMobileBuild(abc.ABC):

    def __init__(self):
        self._mobile = Mobile()

    # CPU部分
    @abc.abstractmethod
    def set_cpu(self):
        pass

    # 主板部分
    @abc.abstractmethod
    def set_master(self):
        pass

    # 屏幕部分
    @abc.abstractmethod
    def set_screen(self):
        pass

    def get_result(self) -> Mobile:
        return self._mobile


class MobileDirector:

    def __init__(self, build: AbsMobileBuild):
        self.build = build

    def __call__(self) -> Mobile:
        self.build.set_master()
        self.build.set_cpu()
        self.build.set_screen()
        return self.build.get_result()


class XiaoMiMobileBuild(AbsMobileBuild):
    def set_cpu(self):
        self._mobile.set_cpu("小米CUP")

    def set_master(self):
        self._mobile.set_master("小米主板")

    def set_screen(self):
        self._mobile.set_screen("小米屏幕")


class HuaWeiMiMobileBuild(AbsMobileBuild):
    def set_cpu(self):
        self._mobile.set_cpu("华为CUP")

    def set_master(self):
        self._mobile.set_master("华为主板")

    def set_screen(self):
        self._mobile.set_screen("华为屏幕")


if __name__ == "__main__":
    build = XiaoMiMobileBuild()
    director = MobileDirector(build)
    mobile = director()
    print(mobile)

    build1 = HuaWeiMiMobileBuild()
    director1 = MobileDirector(build1)
    mobile1 = director1()

    print(mobile1)

 

你可能感兴趣的:(构建者(建造者)模式)