创建型之建造者

建造者模式

构成角色说明
待构建对象最终要返回的目标对象
施工方负责构建动作的接口实现
指挥方负责与施工方交互、调用施工动作的接口实现

实现示例

1 from collections import namedtuple
 2 
 3 
 4 class Element:
 5     Element = namedtuple("页面元素", ["页面1", "页面2"])
 6     element = Element("按期申报页面", "其他申报页面")
 7 
 8 
 9 class Url:
10     Url = namedtuple("url", ["按期申报页面路径", "其他申报页面路径"])
11     url = Url("www.aq.com", "www.qt.com")
12 
13 
14 # 以上部分可抽离到独立模块
15 
16 # 被建造目标对象
17 class Page:
18     def __init__(self):
19         self.name = None
20         self.url = None
21 
22 
23 # 实际构建者
24 class Builder:
25     def __init__(self):
26         self.page = Page()
27 
28     # 获取页面名称
29     def get_name(self, name):
30         self.page.name = name
31         return self # TODO 可移除
32 
33     # 获取页面所在url
34     def get_url(self, url):
35         self.page.url = url
36         return self
37 
38 
39 # 指挥官
40 class Director:
41     def __init__(self):
42         self.builder = None
43 
44     # 与实际构建者交互接口
45     def build(self, builder, **kwargs):
46         self.builder = builder
47         self.builder.get_name(kwargs.get("name"))
48         self.builder.get_url(kwargs.get("url"))
49         return self.builder.page
50 
51 
52 if __name__ == '__main__':
53     a_page = Director().build(Builder(), name=Element.element.页面1, url=Url.url.按期申报页面路径)
54     q_page = Director().build(Builder(), name=Element.element.页面2, url=Url.url.其他申报页面路径)
55     print(a_page.__dict__)
56     print(q_page.__dict__)output:
    {'name': '按期申报页面', 'url': 'www.aq.com'}    {'name': '其他申报页面', 'url': 'www.qt.com'}
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值