建造者模式
构成角色 | 说明 |
---|
待构建对象 | 最终要返回的目标对象 |
施工方 | 负责构建动作的接口实现 |
指挥方 | 负责与施工方交互、调用施工动作的接口实现 |
实现示例
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
32
33
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'}