设计模式之生成器模式

1. 定义

分步骤创建复杂对象,使用相同的创建代码生成不同类型和形式的对象(又译作建造者模式

2. 口语化举例

生产一台电脑,通常而言不是一蹴而就的,电脑太复杂了

所以会把电脑分为几个主要部件进行单独制造,最后拼在一起,可以理解为组装台式电脑,比如CPU主要由AMD和Intel生产,显卡主要由英伟达和AMD生产,主板、电源、内存、硬盘等也有各自的生产商,将这些零件组合在一起,才是一台合格的电脑产品

分组件、分批次制造,最后组合在一起形成最后的产品,这就是生成器模式(建造者模式)

为啥不直接一次性制造好呢?答曰:电脑这个产品太复杂了,实在难以一次性制造完毕

这也是生成器模式与工厂模式(简单工厂、工厂方法)的主要区别:生成器模式主要解决的是复杂产品,工厂方法模式主要解决的是形式多样但通常简单的产品

下面的描述会沿用这个上述这个场景

3. 源码示例

Cesium.js是一个著名的、基于WebGL的GIS前端框架

基于WebGL就不得不提WebGL(OpenGL)的基础概念,比如Shader、Shader Program等

Cesium渲染模块中的Shader对象包含从创建GLSL到创建Shader Program整个流程

流程大致为:

image-20230309155628504

  • Cesium中支持分段编写GLSL代码,包括ShaderStruct、ShaderFunction、ShaderDestination
  • 将分段的代码组合成GLSL,即ShaderSource
  • ShaderBuilder使用ShaderSource创建的ShaderProgram会缓存起来,即ShaderCache
  • 需要新的ShaderProgram时,先查询缓存中是否有,有就复用,无则创建

综上,ShaderBuilder就是使用了生成器模式,用来构造Shader

4. 总结

4.1 设计原则

  • 单一职责原则

    制造CPU的只负责造CPU,制造显卡的只负责制造显卡

  • 代码复用,分步骤创建

    造出来的CPU可以在这台电脑使用,也可以拆下来换到另一台电脑上使用

4.2 适用场景

  • 避免重叠构造函数的出现,即避免多次函数重载

    可以自由的组装电脑,而不是设定具体的电脑生成步骤

  • 创建不同形式的产品

  • 构造组合对象或复杂对象

5. 参考资料

[1] 建造者设计模式(生成器模式) (refactoringguru.cn)

[2] Cesium渲染模块之Shader - 当时明月在曾照彩云归 - 博客园 (cnblogs.com)

posted @   当时明月在曾照彩云归  阅读(9)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
目录导航
目录导航
设计模式之生成器模式
1. 定义
2. 口语化举例
3. 源码示例
4. 总结
4.1 设计原则
4.2 适用场景
5. 参考资料
发布于 2023-10-27 22:53