Python建造者模式

本文介绍了一种软件设计模式——建造者模式。通过该模式,可以在不暴露内部构造细节的情况下创建复杂的对象。文中提供了Python实现的例子,展示了如何使用建造者模式进行实例参数的初始化。

建造者模式,实例的参数初始化由建造类方法完成。

class Instance(object):
    def __init__(self, builder):
        super().__init__()
        self.url = builder.url()
        self.proxy = builder.proxy()


class Builder(object):
    def __init__(self):
        pass

    def url(self):
        return "url"

    def proxy(self):
        return "proxy"


def main():
    builder = Builder()
    instance = Instance(builder)


if __name__ == '__main__':
    main()
### Python 实现建造者设计模式 建造者模式是一种创建型设计模式,允许分步骤构造复杂对象。这种模式使得相同的构建过程能够创建不同的表示形式[^4]。 #### 场景描述 考虑一个简单的HTML文档生成器作为例子。这里的目标是利用建造者模式来简化不同类型HTML页面的创建流程。此过程中涉及两个主要组件:`Director` 和 `Builder` 接口及其具体实现类[^5]。 #### 定义接口与基础结构 首先定义一个通用的`Builder`接口以及具体的建造者类用于组装HTML的不同部分: ```python from abc import ABC, abstractmethod class Builder(ABC): @abstractmethod def set_title(self, title): pass @abstractmethod def add_heading(self, heading_text): pass @abstractmethod def add_paragraph(self, paragraph_text): pass @abstractmethod def get_result(self): pass ``` 接着提供一种或多种具体的建造者实现方式,比如针对标准网页布局的基础建造者: ```python class StandardPageBuilder(Builder): def __init__(self): self._html = ["<html><head>", "</head><body>"] def set_title(self, title): self._html.insert(-1, f"<title>{title}</title>") def add_heading(self, heading_text): self._html.append(f"<h1>{heading_text}</h1>") def add_paragraph(self, paragraph_text): self._html.append(f"<p>{paragraph_text}</p>") def get_result(self): self._html.append("</body></html>") return "\n".join(self._html) ``` #### 导演类 (Director) 为了协调多个建造者的操作并确保一致性的构建逻辑,引入导演类: ```python class Director: def __init__(self, builder: Builder): self._builder = builder def construct_page(self, title, headings, paragraphs): self._builder.set_title(title) for h in headings: self._builder.add_heading(h) for p in paragraphs: self._builder.add_paragraph(p) ``` #### 使用案例 现在有了上述工具之后就可以轻松地按照需求定制各种类型的HTML页面了: ```python if __name__ == "__main__": standard_builder = StandardPageBuilder() director = Director(standard_builder) # 构建一个具有特定标题、头部和段落的标准页面 director.construct_page( "我的个人博客", ["欢迎访问"], ["这是一个关于编程和技术的文章集合."] ) html_content = standard_builder.get_result() print(html_content) ``` 这段代码展示了如何使用建造者模式来分离复杂对象(这里是HTML页面)的构建算法与其实际表现形式之间的关系。这样做的好处是可以很容易地扩展到其他类型的页面或者其他领域内的应用中去。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值