主要对象组成:
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'}