创造者原则(Creator Principle)

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/371 访问。


(1)问题

谁应该负责产生类的实例?

(2)方案

如果符合下面的一个或者多个条件,则可将创建类A实例的职责分配给类B:

  • B包含A;
  • B聚合A;
  • B拥有初始化A的数据并在创建类A的实例时将数据传递给类A;
  • B记录A的实例;
  • B频繁使用A。

此时,我们称类B是类A对象的创建者。如果符合多个条件,类B聚合或者包含类A的条件优先。

(3)分析

创建对象是面向对象系统中最普遍的活动之一,因此,确定一个分配创建对象的通用职责非常重要。如果职责分配合理,设计就能降低耦合,提高设计的清晰度、封装性和重用性。通常情况下,如果对象的创建过程不是很复杂,则根据上述原则,由使用对象的类来创建对象。但是如果创建过程非常复杂,而且可能需要重复使用对象实例或者需要从外部注入一个对象实例,此时,可以委托一个专门的工厂类来辅助创建对象。创建者原则与各种工厂模式(简单工厂模式、工厂方法模式和抽象工厂模式)相对应。


示例:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/371 访问。

public static class FruitFactory {private Fruit _fruit = null;public static Fruit CreateFruit(FruitType type) {_fruit = null;switch(type) {case FruitType.Apple:_fruit = new Apple();break;case FruitType.Orange:_fruit = new Orange();break;case FruitType.Pear:_fruit = new Pear();break;default:throw new UnknowFruitException();}return _fruit;}}

注:以上为示意性代码,部分类和枚举未给出。

水果工厂FruitFactory根据参数生成水果的实例。水果工厂包含水果,水果工厂维持了水果的实例,水果工厂频繁的生成水果。

通用职责分配软件原则之2-创造者原则相关推荐

  1. 通用职责分配软件原则之4-高内聚原则

    高内聚原则(High Cohesion Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/375 访问 ...

  2. 通用职责分配软件原则之7-纯虚构原则

    纯虚构原则(Pure Fabrication Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/381 ...

  3. 通用职责分配软件原则之6-多态原则

    多态原则(Polymorphism Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/379 访问. ...

  4. 通用职责分配软件原则之1-信息专家原则

    信息专家原则(Information Expert Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/ ...

  5. 通用职责分配软件原则之5-控制器原则

    控制器原则(Controller Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/377 访问. ( ...

  6. 通用职责分配软件原则之3-低耦合原则

    低耦合原则(Low Coupling Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/373 访问. ...

  7. GRASP通用职责分配软件模式

    1.  概述 它的核心思想是"职责分配(Responsibility Assignment)".GRASP提出了几个基本原则,用来解决面向对象设计的一些问题. Craig Larm ...

  8. 通用职责分配软件原则之9-受保护变量原则

    受保护变量原则(Protected Variations Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archiv ...

  9. 通用职责分配软件原则之8-中介原则

    中介原则(Indirection Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/383 访问. ( ...

最新文章

  1. java数据库编程(JDBC)
  2. Error: Network is unreachable. Reason: couldn‘t connect to server localhost:27017(连接mongodb数据库失败)
  3. HDU 1757 A Simple Math Problem (矩阵快速幂)
  4. AUTOSAR从入门到精通100讲(三十四)-AUTOSAR的分层架构
  5. H5网页适配 iPhoneX,就是这么简单
  6. Microsoft Visual Studio 文件识别及其用途简述
  7. 设计精美Power Bi报告的诀窍以及让人眼前一亮的精美Power Bi图表
  8. 图像处理——DCT变换的学习笔记
  9. MariaDB安装教程
  10. 实验3:视频播放小程序
  11. EasyAr聚焦模式
  12. 李白的藏头诗鸿蒙圣安卓,李白藏头诗生成器
  13. softice使用(1)- 在VMware Workstation 中使用SoftICE zz xfocus
  14. 樊登读书会终身成长读后感_樊登读书会《终身成长》读后感
  15. 如何在Eclipse上创建新项目
  16. 使用CSS画一个萌萌的大白
  17. python读word文档计算字数,Python: Word(docx)文档词频统计
  18. javascript怎么隐藏显示div
  19. 天津大学异地新校区,首次曝光设计效果图!
  20. setheader是什么意思_XMLHTTP中setRequestHeader()简单分析

热门文章

  1. Linux cat命令:连接文件并打印输出到标准输出设备
  2. DataGridView控件
  3. 测试记录流水s1 0080481T02
  4. django 别名与命名空间 reverse反转得到路径
  5. 查询集-104.课时104.【Django视图高级】QueryDict的用法讲解(Av61533158,P104)
  6. 业务实时监控服务ARMS推出小程序监控支持各种小程序
  7. Ruby 101:重用、隐藏和多态
  8. GSK携手学术机构共建健康大数据系统
  9. 软件架构设计箴言理解
  10. zabbix监控vsftp服务,发生故障并自动恢复