当前位置:
首页 > temp > 简明python教程 >
-
构建者(建造者)模式
引子
在软件系统中,有时候面临着“一个复杂对象”的创建工作,期通常由各个部分的子对象用一定的算法构成;由于需求的变化 ,这个复杂的对象各个部分经常面临着剧烈变化 ,但是将它们组合在一起的算法却是相对稳定。
概念
构建者模式是一个独特的设计模式,有助于使用简单的对象构造复杂的对象平使用算法。
类图
例子分析
例如手机,它是由 屏幕 ,主板,处理器等等组成的,但是组成手机的这些各个部分是可变的。
不同的型号的手机所采用的这些组件都是不一样的;如处理器有 联发科 、 高通 、 英伟达 等等。
同理主板与手机屏目也是这样。
复杂对象
在这例子中复杂的对象指的是手机这东西,它是由多个子对象组成的。
变化部分
变化的部分指的是组成手机这对象的各个子对象,它们是可变的。
如处理器有 联发科 、 高通 、 英伟达 等等。
算法部分
假设手机都是构造是这样:主板->处理器-> 屏幕 ->完成
主板上安装处理器然后在装上屏幕一个手机就这样构造完成了。
实现代码
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)
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数