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

免费建设企业网站杭州下城网站建设

免费建设企业网站,杭州下城网站建设,app软件大全,腾宁科技做网站399元全包一. 背景在开发中,我们经常需要创建复杂对象(DTO,配置,请求体等)这些对象属性很多,但是并不是每次都需要全部填写:有些属性可以用默认值有些属性可以随机生成有些属性依赖其他对象如果直接用构造函数&#…

一. 背景

在开发中,我们经常需要创建复杂对象(DTO,配置,请求体等)

这些对象属性很多,但是并不是每次都需要全部填写:

  • 有些属性可以用默认值
  • 有些属性可以随机生成
  • 有些属性依赖其他对象

如果直接用构造函数,代码会像下面这样,可读性比较差

profile = UserProfile(username="alice",email="alice@example.com",role="admin",tags=["tester"],colors=["red"],preferences=[]
)

Bulider模式可以帮我们解决这个问题

二. 什么是 Builder 模式?

1、Builder模式(构造者模式)是一种创建型设计模式

  • 把“任何一步步创建对象”的逻辑抽离到一个Builder类里;
  • 让调用方用链式方法逐步设置属性;
  • 支持默认值、随机值、依赖值等灵活逻辑。

2、优点:

  • 可读性强
  • 灵活性高
  • 方便扩展和默认值处理

三、代码示例

1、BuliderBase提供通用的create方法:

from typing import Any, Type, TypeVarT = TypeVar("T", bound="BuilderBase")class BuilderBase:@classmethoddef create(cls: Type[T], **kwargs) -> Any:"""通用创建方法:根据 kwargs 自动调用 with_xxx 方法或直接赋值。"""builder = cls()for key, value in kwargs.items():method_name = f"with_{key}"if hasattr(builder, method_name):getattr(builder, method_name)(value)else:setattr(builder, key, value)return builder.build_object()

2、UserProFileBulider:具体实现

import random
from typing import List, Optionalclass UserProfileBuilder(BuilderBase):def __init__(self):self.username: Optional[str] = Noneself.email: Optional[str] = Noneself.role: Optional[str] = Noneself.tags: List[str] = []self.colors: List[str] = []self.preferences: List[str] = []def enable_randomized_attributes(self, enabled: bool):"""开启随机属性生成"""if enabled:self.with_random_attributes()return selfdef with_random_attributes(self, number: Optional[int] = None):"""随机生成标签和颜色"""color_pool = ["red", "blue", "green", "yellow"]tag_pool = ["admin", "tester", "developer", "guest"]max_count = min(len(color_pool), len(tag_pool))if number is None:number = random.randint(1, max_count)count = min(number, max_count)self.colors = random.sample(color_pool, k=count)self.tags = random.sample(tag_pool, k=count)return selfdef build_object(self):"""构建 UserProfile 对象"""if self.username is None:self.username = "default_user"return UserProfile(username=self.username,email=self.email,role=self.role,tags=list(self.tags),colors=list(self.colors),preferences=list(self.preferences),)class UserProfile:"""最终要构建的对象"""def __init__(self, username, email, role, tags, colors, preferences):self.username = usernameself.email = emailself.role = roleself.tags = tagsself.colors = colorsself.preferences = preferencesdef __repr__(self):return f"<UserProfile {self.username}, {self.role}>"

3、使用示例

# 方式一:一步完成
profile = UserProfileBuilder.create(username="alice",email="alice@example.com",role="admin",enable_randomized_attributes=True
)# 方式二:链式调用
builder = UserProfileBuilder()
profile2 = (builder.with_random_attributes(2).enable_randomized_attributes(True).build_object()
)print(profile)
print(profile2)

4、优点

  • 可读性强:链式 API 一看就懂。

  • 灵活性高:可自由组合不同的 with_xxx 方法。

  • 默认值处理:例如用户名为空时自动填充 default_user

  • 可扩展:新增属性只需加对应的 with_xxx 方法。

5、缺点

  • 对于简单对象,Builder 显得“多余”;

  • 初学者可能不习惯 with_xxx 的用法;

  • 增加了一层抽象。

6、适用场景

  • 测试数据构造(自动化测试用例、随机测试数据)

  • 复杂配置对象(数据库配置、UI 配置、HTTP 请求体)

  • 需要灵活扩展的 DTO

7、传参说明

  • 普通写法
    class UserProfile:def __init__(self, username, email, role):self.username = usernameself.email = emailself.role = roleprofile = UserProfile("alice", "alice@example.com", "admin")
    

    username -> __init__ -> self.username

  • builder模式写法:参数不会直接传给最终的产品类,而是先存放在Builder的属性里(比如:self._username),等到调用build()时,再把这些参数传给UserProfile,由产品类来保存:
    流程:username -> builder._username -> build() -> UserProfile(self.username)
  • 关键区别
    • 普通类:参数直接进构造函数,马上存到属性上。

    • Builder:参数先存到 Builder,等你确认完毕,再一次性传给最终类(更灵活)。

    • 也就是说,self.usernameself.email 这些属性依然存在于 最终的产品类UserProfile)里。
      只是 Builder 先帮你暂存参数,再把它们“打包”交给产品类

http://www.dtcms.com/a/445026.html

相关文章:

  • 网站运营方法做厂房出租有那些推广网站
  • 建设微网站多少钱番禺 大石网站建设
  • 商洛网站建设求职简历王野天个人简介
  • 网站模板插件网站字体大小合适
  • 网站建设搜索键如何设置链接中小企业平台
  • 网站设置请求桌面网站门户网站开发语言
  • 济南自助建站模板整站seo技术搜索引擎优化
  • 个人网站设计要求自己网站怎么做外链
  • 平度网站建设旅游景区网络推广方案
  • 响应式网站常用宽度商家自己做的商品信息查询网站
  • 做网站需要的技能酒类公司网站模板
  • dlink nas建设网站wordpress显示位置
  • 娱乐类网站wordpress文章定时发布
  • 个人可以做导航网站吗房源信息网
  • 专业做网站建设公司好吗优秀网站建设哪家好
  • 长沙公司网站模板制作方案如何开发微信小程序商店
  • wordpress全站启用ssl张戈西安信誉好的做网站的
  • 网站大全浏览器向国旗致敬做时代新人网站
  • 南充阆中网站建设wordpress同类软件
  • 郑州微网站wordpress修复数据库
  • 宜章网站建设品牌打造的思路与方法
  • 河北网站建设联系方式网站建设规划方案ppt模板
  • 推进网站建设工作计划自我介绍网页设计代码
  • 怎么查网站关键词密度北京专门做网站的公司
  • 湘潭网站建设优化技术wordpress代码实现网站地图
  • flash网站模板修改湖南高端网站制作公司
  • 遵义住房和城乡建设局网站安阳区号0372
  • 北沙滩网站建设做网络销售都做什么网站
  • 烟台做网站哪里好网站改版301设置
  • 仲恺建设局网站学网站建设基础