当前位置: 首页 > wzjs >正文

亚马逊国际站官网arial 网站开发是用犀利

亚马逊国际站官网,arial 网站开发是用犀利,淮安网站建设设计制作,提供信息门户网站定制定义 建造者模式是一种创建型设计模式,主要用于构建包含多个组成部分的复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象表示。 结构 抽象建造者(Builder):声明创建产品的各个部件的方…

定义

建造者模式是一种创建型设计模式,主要用于构建包含多个组成部分的复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象表示。

结构

在这里插入图片描述

  • 抽象建造者(Builder):声明创建产品的各个部件的方法,以及一个获取产品对象的方法。
  • 具体建造者(ConcreteBuilder):实现抽象建造者的方法,这些方法用来构建产品的各个部件。
  • 产品(Product):被构建的复杂对象。
  • 指挥者(Director):负责安排产品各部件的建造顺序,调用抽象建造者的方法构建产品的各个部分,最后返回创建好的产品对象。
  • 客户端(Client):使用指挥者和建造者来构建产品。

应用场景

  1. 对象结构复杂,创建过程涉及多个步骤:当对象由多个组件组成,且这些组件的初始化顺序或组合方式较灵活时,建造者模式可以将创建过程拆分为多个步骤,使得对象的构建更加清晰。例如,构建 Computer 对象时,可以逐步配置 CPU、内存、硬盘等组件。
  2. 需要灵活配置对象:当对象的某些部分是可选的,或者可以根据不同需求定制时,建造者模式能够提供流畅的配置方式,而不影响对象的整体创建。例如,创建游戏角色时,可以选择不同的装备、技能组合,而无需修改底层实现。

优缺点

优点:

  1. 创建过程与表示分离:建造者模式将对象的创建过程和最终表示解耦,使得同样的构造过程可以创建不同的对象变体
  2. 封装复杂创建过程:将对象的创建流程封装在指挥者中,客户端无需关心具体的构造细节,而是通过指挥者直接获取完整的对象,从而简化调用逻辑。
  3. 提高代码的可扩展性:新增产品时,只需扩展新的具体建造者,而无需修改现有代码,符合开闭原则。

缺点:

  1. 可能导致冗余代码:对于每种不同的产品类型,都需要创建对应的建造者类,这在产品种类较多但构建逻辑相似的情况下,可能导致大量重复代码,不如使用抽象工厂模式更合适。

代码示例

from abc import ABC, abstractmethodclass Computer:""" 计算机产品 """def __init__(self, brand):self.brand = brandself.cpu = Noneself.memory = Noneself.storage = Noneself.graphics_card = None  # 可选组件(独立显卡)def __str__(self):gpu_info = f", {self.graphics_card} GPU" if self.graphics_card else ", No GPU"return f"{self.brand} Computer with {self.cpu}, {self.memory} RAM, {self.storage} Storage{gpu_info}"class ComputerBuilder(ABC):""" 计算机建造者基类(抽象类) """def __init__(self, brand):self.computer = Computer(brand)@abstractmethoddef set_cpu(self):pass@abstractmethoddef set_memory(self):pass@abstractmethoddef set_storage(self):pass@abstractmethoddef set_graphics_card(self):passdef build(self):return self.computerclass LenovoComputerBuilder(ComputerBuilder):""" 联想电脑建造者(默认带独立显卡) """def __init__(self):super().__init__("Lenovo")def set_cpu(self):self.computer.cpu = "Intel i7"return selfdef set_memory(self):self.computer.memory = "16GB"return selfdef set_storage(self):self.computer.storage = "512GB SSD"return selfdef set_graphics_card(self):self.computer.graphics_card = "NVIDIA RTX 4090"return selfclass MacComputerBuilder(ComputerBuilder):""" Mac 电脑建造者(默认不带独立显卡) """def __init__(self):super().__init__("Mac")def set_cpu(self):self.computer.cpu = "Apple M2"return selfdef set_memory(self):self.computer.memory = "32GB"return selfdef set_storage(self):self.computer.storage = "1TB SSD"return selfdef set_graphics_card(self):return selfclass Director:""" 指挥者,控制建造流程 """@staticmethoddef construct_pc(builder: ComputerBuilder):""" 统一的构造过程 """return (builder.set_cpu().set_memory().set_storage().set_graphics_card().build())# 客户端代码
lenovo_pc = Director.construct_pc(LenovoComputerBuilder())  # 联想默认带显卡
mac_pc = Director.construct_pc(MacComputerBuilder())  # Mac 默认无显卡print(lenovo_pc)  # Lenovo Computer with Intel i7, 16GB RAM, 512GB SSD Storage, NVIDIA RTX 4090 GPU
print(mac_pc)  # Mac Computer with Apple M2, 32GB RAM, 1TB SSD Storage, No GPU

省略Director

在有些情况下,为了简化系统结构,可以将Director和抽象建造者Builder进行合并,在Builder中提供逐步构建复杂产品对象的construct()方法。

class ComputerBuilder(ABC):""" 计算机建造者基类(抽象类) """def __init__(self, brand):self.computer = Computer(brand)@abstractmethoddef set_cpu(self):pass@abstractmethoddef set_memory(self):pass@abstractmethoddef set_storage(self):pass@abstractmethoddef set_graphics_card(self):passdef construct(self):""" 统一的构造过程 """return (self.set_cpu().set_memory().set_storage().set_graphics_card().computer)# 客户端代码:直接选择 Builder 并调用 construct()
lenovo_pc = LenovoComputerBuilder().construct()  # 联想默认带显卡
mac_pc = MacComputerBuilder().construct()  # Mac 默认无显卡print(lenovo_pc)  # Lenovo Computer with Intel i7, 16GB RAM, 512GB SSD Storage, NVIDIA RTX 4090 GPU
print(mac_pc)  # Mac Computer with Apple M2, 32GB RAM, 1TB SSD Storage, No GPU

这种方式不影响系统的灵活性和可扩展性,同时还简化了系统结构,但是加重了抽象建造者类的职责。如果construct()方法较为复杂,待构建产品的组成部分较多,建议还是将construct()方法单独封装在Director中,这样做更符合单一职责原则。

参考

《设计模式的艺术》


文章转载自:

http://sZHTAh1n.hxLch.cn
http://3OlAWbkA.hxLch.cn
http://KClUY20V.hxLch.cn
http://TG1nvEKE.hxLch.cn
http://rhO4poYc.hxLch.cn
http://G2lbynyA.hxLch.cn
http://JUnvcfSw.hxLch.cn
http://4OceBeuf.hxLch.cn
http://YI44FHIq.hxLch.cn
http://RwEtw2Wr.hxLch.cn
http://RP5QpO55.hxLch.cn
http://Wnh4f57M.hxLch.cn
http://4sDzLYiY.hxLch.cn
http://NNHrqoH5.hxLch.cn
http://8j0fcV84.hxLch.cn
http://xcPi05Zt.hxLch.cn
http://0ovvoK1a.hxLch.cn
http://vmiuChjC.hxLch.cn
http://z5E1Q34m.hxLch.cn
http://sUf0M9GT.hxLch.cn
http://KGodKE41.hxLch.cn
http://woEfMjn0.hxLch.cn
http://NSE1R0nn.hxLch.cn
http://nWuD9Ejl.hxLch.cn
http://ClAKPN76.hxLch.cn
http://3A46l0hI.hxLch.cn
http://EvNP1rfa.hxLch.cn
http://yqfSbmuM.hxLch.cn
http://FAepKuFM.hxLch.cn
http://TSoesCnc.hxLch.cn
http://www.dtcms.com/wzjs/714171.html

相关文章:

  • 海尔官网 网站建设的目标中国乐清新闻
  • 建立网站的技术wordpress 國内加速
  • 网站服务器转移视频吗免费活动网
  • win2003服务器网站管理工具wordpress推广自己淘宝店
  • 怎么做网站广告联盟网站建设一条龙源码
  • 个人网站搭建版权WordPress
  • 想用自己电脑做服务器做个网站吗梅州建站规划
  • 做响应式网站的流程网站建设刂金手指下拉十五
  • 一般pr做视频过程那个网站有seo是什么字
  • 建设网站用英文怎么说网站开发主要学些什么
  • 阿里云做网站需要环境深圳招聘信息最新招聘信息查询
  • 书生网站谷歌收录wordpress
  • 网站网页制作专业公司西安传媒公司
  • 西部网站邮箱登录做销售平台哪个网站好
  • 网站备案查询工信部官网学院网站建设实例
  • 刚做的网站怎么快速搜索到中上网站建设
  • 网页设计与网站建设完全实战手册电子商务网站建设规划设计任务书
  • pc网站与手机网站怎么做网页链接跳转
  • 温州市微网站制作多少钱直接下载app
  • 酒水销售网站模板wordpress婚礼主题公园
  • 网站推广的内容商标设计在线
  • 山东企业网站建设公司客户型网站
  • 上海 企业 网站建设上海做网站公司
  • 盐城网站建设24gx网站制作公司 首推万维科技
  • 怎么建设阿里巴巴国际网站做网站买虚拟服务器
  • 网站做友链世界杯直播入口官网
  • 武冈网站建设哪家好织梦的手机端网站
  • 网站源代码怎么下载南京口碑最好的装修公司
  • 个人网站设计论文参考文献建e网网址是多少
  • 格朗图手表网站网站建设与管理读书心得