写点什么

【愚公系列】2022 年 06 月 通用职责分配原则 (二)- 创造者原则

作者:愚公搬代码
  • 2022 年 6 月 14 日
  • 本文字数:1064 字

    阅读完需:约 3 分钟

前言

GRASP:General Responsibility Assignment Software Patterns 通用职责分配软件模式。


首先我们先来区分下 GRASP 与 GOF 模式的区别,它们主要在什么时候用,用来做什么。在软件开发过程中,我们常说面向对象开发,面向对象思想应该贯穿整个软件开发生命周期。我们在将现实世界中的业务对象及业务功能抽象成软件系统中的系统对象过程中应该遵循使用 GRASP 模式。而在具体技术实现上应该遵循使用 GOF 设计模式,来实现系统功能。即 GRASP 主要使用在分析设计阶段,与具体技术无关;而 GOF 模式主要使用在开发阶段,与具体技术相关,它是对 GRASP 设计成果进行实现时而使用,是一种开发阶段的设计模式。


GRASP 软件设计模式包括 9 个模式:创建者、信息专家、低耦合、控制器、高内聚、多态性、纯虚构、间接性、防止变异。


一、创造者原则(Creator Principle)

(1)问题


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


(2)方案


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


B 包含 A;B 聚合 A;B 拥有初始化 A 的数据并在创建类 A 的实例时将数据传递给类 A;B 记录 A 的实例;B 频繁使用 A。此时,我们称类 B 是类 A 对象的创建者。如果符合多个条件,类 B 聚合或者包含类 A 的条件优先。


(3)分析


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

二、使用步骤

示例

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 根据参数生成水果的实例。水果工厂包含水果,水果工厂维持了水果的实例,水果工厂频繁的生成水果。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2022.03.01 加入

该博客包括:.NET、Java、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、python、大数据等相关使用及进阶知识。查看博客过程中,如有任何问题,皆可随时沟通。

评论

发布
暂无评论
【愚公系列】2022年06月 通用职责分配原则(二)-创造者原则_6月月更_愚公搬代码_InfoQ写作社区