沈阳自助建站软件长沙seo霜天

张小明 2026/1/10 13:02:50
沈阳自助建站软件,长沙seo霜天,wordpress动画插件下载地址,企业vi怎么设计Python 中的建造者模式#xff08;Builder Pattern#xff09; 建造者模式是一种创建型设计模式#xff0c;用于将一个复杂对象的构建过程与其表示分离#xff0c;使得同样的构建过程可以创建不同的表示。 核心目的#xff1a; 当一个对象有许多可选参数、配置项#x…Python 中的建造者模式Builder Pattern建造者模式是一种创建型设计模式用于将一个复杂对象的构建过程与其表示分离使得同样的构建过程可以创建不同的表示。核心目的当一个对象有许多可选参数、配置项或者构建步骤复杂时使用建造者模式可以让代码更清晰、可读性更高避免出现“ telescoping constructor”超长构造函数问题。典型应用场景创建复杂对象如 HTML、SQL 查询、配置文件、Pizza、电脑配置等需要一步步配置对象的属性同一个构建过程需要产生不同配置的对象构建过程必须保持稳定但最终产品有多种变体建造者模式 vs 工厂模式工厂模式关注“创建什么对象”建造者模式关注“如何一步步构建一个复杂对象”Python 实现示例定制 Pizza我们用一个经典例子——定制披萨来演示建造者模式。fromabcimportABC,abstractmethodfromtypingimportList# 最终产品PizzaclassPizza:def__init__(self):self.size:strself.crust:strself.sauce:strself.cheese:strself.toppings:List[str][]def__str__(self):returnf Pizza: Size:{self.size}Crust:{self.crust}Sauce:{self.sauce}Cheese:{self.cheese}Toppings:{, .join(self.toppings)orNone}.strip()# 抽象建造者classPizzaBuilder(ABC):abstractmethoddefset_size(self,size:str):passabstractmethoddefset_crust(self,crust:str):passabstractmethoddefset_sauce(self,sauce:str):passabstractmethoddefadd_cheese(self,cheese:str):passabstractmethoddefadd_topping(self,topping:str):passabstractmethoddefget_pizza(self)-Pizza:pass# 具体建造者Margherita Pizza BuilderclassMargheritaPizzaBuilder(PizzaBuilder):def__init__(self):self.pizzaPizza()defset_size(self,size:str):self.pizza.sizesizereturnself# 支持链式调用defset_crust(self,crust:str):self.pizza.crustcrustreturnselfdefset_sauce(self,sauce:str):self.pizza.sauceTomato# Margherita 固定番茄酱returnselfdefadd_cheese(self,cheese:str):self.pizza.cheeseMozzarellareturnselfdefadd_topping(self,topping:str):iftopping.lower()basil:self.pizza.toppings.append(topping)returnselfdefget_pizza(self)-Pizza:returnself.pizza# 具体建造者Pepperoni Pizza BuilderclassPepperoniPizzaBuilder(PizzaBuilder):def__init__(self):self.pizzaPizza()defset_size(self,size:str):self.pizza.sizesizereturnselfdefset_crust(self,crust:str):self.pizza.crustcrustreturnselfdefset_sauce(self,sauce:str):self.pizza.saucesaucereturnselfdefadd_cheese(self,cheese:str):self.pizza.cheesecheesereturnselfdefadd_topping(self,topping:str):self.pizza.toppings.append(topping)returnselfdefget_pizza(self)-Pizza:returnself.pizza# 指挥者Director可选用于定义构建顺序classPizzaChef:def__init__(self,builder:PizzaBuilder):self.builderbuilderdefmake_pizza(self,size:str):return(self.builder.set_size(size).set_crust(Thin).set_sauce(Tomato).add_cheese(Mozzarella).get_pizza())# 使用示例if__name____main__:# 方式1使用指挥者标准流程margherita_builderMargheritaPizzaBuilder()chefPizzaChef(margherita_builder)pizza1chef.make_pizza(Large)pizza1.toppings.append(Basil)# 额外添加print(pizza1)# 方式2手动链式构建更灵活Python 中常见pepperoni_builderPepperoniPizzaBuilder()pizza2(pepperoni_builder.set_size(Medium).set_crust(Stuffed).set_sauce(Spicy Tomato).add_cheese(Cheddar).add_topping(Pepperoni).add_topping(Mushrooms).add_topping(Olives).get_pizza())print(pizza2)Python 中的简化版更 PythonicPython 支持链式调用返回 self和默认参数因此可以实现更简洁的建造者classPizza:def__init__(self,sizeMedium):self.sizesize self.crustClassicself.sauceTomatoself.cheeseMozzarellaself.toppings[]defset_crust(self,crust):self.crustcrustreturnselfdefset_sauce(self,sauce):self.saucesaucereturnselfdefadd_topping(self,topping):self.toppings.append(topping)returnselfdef__str__(self):returnf{self.size}{self.crust}pizza with{self.sauce},{self.cheese}, toppings:{self.toppings}# 直接使用无需额外 Builder 类pizza(Pizza(Large).set_crust(Thin).set_sauce(BBQ).add_topping(Chicken).add_topping(Onions))print(pizza)这种方式在 Python 社区更常见因为简洁且易读。建造者模式结构总结角色职责Product复杂对象PizzaBuilder抽象接口定义构建步骤ConcreteBuilder实现具体构建逻辑返回产品Director可选编排构建顺序优点构建过程与表示分离一步步构建代码可读性高支持链式调用Fluent Interface易于扩展新产品类型缺点如果产品简单引入建造者会过度设计需要更多类实际推荐Python 项目中对象参数不多直接用默认参数 可选参数参数中等5-10个用链式方法Fluent Builder参数很多或构建复杂使用完整建造者模式 Director如果你想看其他例子如构建 SQL 查询、HTML 字符串、DataFrame 配置、游戏角色创建等欢迎告诉我
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

大连网站制作推广开一家公司需要多少资金

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 构建一个效率对比工具,能够:1. 模拟npm err! cb() never called!错误场景 2. 记录手动解决该问题的平均时间 3. 展示使用AI辅助解决的流程和时间 4. 生成对比…

张小明 2026/1/9 17:11:50 网站建设

成都网站定制费用产品介绍网站html

12课时吃透DIFY!零代码搭建AI客服 工作流,大模型应用实战全流程 随着人工智能技术的迅速发展,企业和个人对自动化工具的需求愈发强烈。零代码平台(DIFY)凭借其简易的操作界面与强大的功能,成为了无数用户实…

张小明 2026/1/9 13:45:35 网站建设

福州网站建设的公司北京制作网站公司哪家好

目录 一、产供销一体化不是合并部门 第一步:搞准需求 怎么把需求搞准? 怎么办? 第二步:打通数据和流程 简单来说,流程要形成闭环,不能断档 常见问题 问题一:让部门利益凌驾于公司目标之…

张小明 2026/1/9 13:45:33 网站建设

各大网站查重率比较福清哪有做网站的地方

还在为联发科设备的底层调试而头疼吗?📱 面对各种复杂的命令行操作,是不是觉得无从下手?今天,让我带你走进MTKClient的世界,这款革命性的工具将彻底改变你对设备调试的认知! 【免费下载链接】mt…

张小明 2026/1/9 13:45:31 网站建设

wordpress 站内通知营销手机网站制作

你是否曾经在写邮件时突然发现打出的全是英文?或者在编程时因为大小写错误而调试半天?输入法状态的不确定性已经成为现代办公和创作中的常见困扰。ImTip作为一款仅696KB的轻量级工具,通过实时显示输入法状态提示,彻底解决了这一困…

张小明 2026/1/9 13:45:30 网站建设

潍坊网站建设求职简历不同网站的主机和域名

Jessibuca Pro:Web流媒体播放器的技术演进与架构突破 【免费下载链接】jessibuca Jessibuca是一款开源的纯H5直播流播放器 项目地址: https://gitcode.com/GitHub_Trending/je/jessibuca 在当今数字化时代,Web流媒体播放器已成为连接用户与内容的…

张小明 2026/1/9 15:44:24 网站建设