深圳幻海软件技术有限公司 欢迎您!

设计模式-创建型模式之建造者

2023-03-13

主要对象组成:1、被构建目标对象2、指挥官3、实际构建者4、指挥官与实际构建者交互接口由于本人现阶段从事selenium方面工作,故经常和web页面打交道,在新框架构思过程中,正好期间学习到此设计模式,所以产生了一点想法,页面对象通常包含路径、元素、接口......,所以可以把这些组成都分成独立的模

主要对象组成:

  1、被构建目标对象

  2、指挥官

  3、实际构建者

  4、指挥官与实际构建者交互接口

由于本人现阶段从事selenium方面工作,故经常和web页面打交道,在新框架构思过程中,正好期间学习到此设计模式,所以产生了一点想法,页面对象通常包含路径、元素、接口......,所以可以把这些组成都分成独立的模块,使用此模式进行以上的要素拼接,逐步组建起一个复杂而完备的页面对象。

 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     # 获取页面所在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'}