当前位置:
首页 > 编程开发 > Python基础教程 >
-
python基础教程之构建者(建造者)模式
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
引子
在软件系统中,有时候面临着“一个复杂对象”的创建工作,期通常由各个部分的子对象用一定的算法构成;由于需求的变化 ,这个复杂的对象各个部分经常面临着剧烈变化 ,但是将它们组合在一起的算法却是相对稳定。
概念
构建者模式是一个独特的设计模式,有助于使用简单的对象构造复杂的对象平使用算法。
类图
例子分析
例如手机,它是由 屏幕 ,主板,处理器等等组成的,但是组成手机的这些各个部分是可变的。
不同的型号的手机所采用的这些组件都是不一样的;如处理器有 联发科 、 高通 、 英伟达 等等。
同理主板与手机屏目也是这样。
复杂对象
在这例子中复杂的对象指的是手机这东西,它是由多个子对象组成的。
变化部分
变化的部分指的是组成手机这对象的各个子对象,它们是可变的。
如处理器有 联发科 、 高通 、 英伟达 等等。
算法部分
假设手机都是构造是这样:主板->处理器-> 屏幕 ->完成
主板上安装处理器然后在装上屏幕一个手机就这样构造完成了。
实现代码
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' <Mobile(master={self.__master}screen={self.__screen}cpu={self.__cpu})>' 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)
栏目列表
最新更新
Python菜鸟文本处理4种方法
构建者(建造者)模式
【合集】python 的一些妙用,推导式、三元
自己写的一个连数据库的音乐调用模块
Pyhton 连接数据库
django之路由层
抽象工厂模式
python数据类型(第二弹)
Python知识点
python进程池和进程锁
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
mysql 安装了最新版本8.x版本后的报错:
Mysql空间数据&空间索引(spatial)
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能
将Session值储存于SQL Server中