(精华)2020年8月30日 通用职责分配原则(二)-创造者原则(Creator Principle)

举报
愚公搬代码 发表于 2021/10/19 22:36:14 2021/10/19
【摘要】 创造者原则(Creator Principle) (1)问题 谁应该负责产生类的实例? (2)方案 如果符合下面的一个或者多个条件,则可将创建类A实例的职责分配给类B: B包含A; B聚合A; ...

创造者原则(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;
    }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

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

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

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/108293742

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。