通用职责分配软件原则之2-创造者原则
创造者原则(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-创造者原则相关推荐
- 通用职责分配软件原则之4-高内聚原则
高内聚原则(High Cohesion Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/375 访问 ...
- 通用职责分配软件原则之7-纯虚构原则
纯虚构原则(Pure Fabrication Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/381 ...
- 通用职责分配软件原则之6-多态原则
多态原则(Polymorphism Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/379 访问. ...
- 通用职责分配软件原则之1-信息专家原则
信息专家原则(Information Expert Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/ ...
- 通用职责分配软件原则之5-控制器原则
控制器原则(Controller Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/377 访问. ( ...
- 通用职责分配软件原则之3-低耦合原则
低耦合原则(Low Coupling Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/373 访问. ...
- GRASP通用职责分配软件模式
1. 概述 它的核心思想是"职责分配(Responsibility Assignment)".GRASP提出了几个基本原则,用来解决面向对象设计的一些问题. Craig Larm ...
- 通用职责分配软件原则之9-受保护变量原则
受保护变量原则(Protected Variations Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archiv ...
- 通用职责分配软件原则之8-中介原则
中介原则(Indirection Principle) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/383 访问. ( ...
最新文章
- java数据库编程(JDBC)
- Error: Network is unreachable. Reason: couldn‘t connect to server localhost:27017(连接mongodb数据库失败)
- HDU 1757 A Simple Math Problem (矩阵快速幂)
- AUTOSAR从入门到精通100讲(三十四)-AUTOSAR的分层架构
- H5网页适配 iPhoneX,就是这么简单
- Microsoft Visual Studio 文件识别及其用途简述
- 设计精美Power Bi报告的诀窍以及让人眼前一亮的精美Power Bi图表
- 图像处理——DCT变换的学习笔记
- MariaDB安装教程
- 实验3:视频播放小程序
- EasyAr聚焦模式
- 李白的藏头诗鸿蒙圣安卓,李白藏头诗生成器
- softice使用(1)- 在VMware Workstation 中使用SoftICE zz xfocus
- 樊登读书会终身成长读后感_樊登读书会《终身成长》读后感
- 如何在Eclipse上创建新项目
- 使用CSS画一个萌萌的大白
- python读word文档计算字数,Python: Word(docx)文档词频统计
- javascript怎么隐藏显示div
- 天津大学异地新校区,首次曝光设计效果图!
- setheader是什么意思_XMLHTTP中setRequestHeader()简单分析