objective-c - 在尽可能少的耦合下在许多类之间传递一个对象

标签 objective-c oop design-patterns

在我的应用程序中,我使用了一个类(目前是单例),例如 ClassA,用于管理内容。

因为它是单例,所以我使用这种行为在许多需要它的类中获得了这个独特的实例。

但是现在,我不能再将这个类保持为单例,我需要一个 NSDocument 实例。

所以我在我的 NSDocument 子类上创建了一个 ClassA 的实例,但问题是将这个对象传递给需要它的类。

我有这种结构:

Class1 <- Class2 <- Class3 <- 文档 -> ClassA

我需要访问 Class1 中 Document 的 ClassA 实例。

我可以使用依赖注入(inject)通过 init 或 setter 方法在 Class1 中传递 ClassA,但是因为 Document 不能直接访问 Class1,所以我需要将它传递给 Class3,然后传递给 Class2,然后传递给 Class1。

这是唯一的方法吗?还是有其他更好的方法来处理它?<​​/p>

最佳答案

我会说回到你的单例原则,但使用 NSDocument 作为 ClassA 对象字典的键;像这样的东西:

static NSMutableDictionary *_classCache = [[NSMutableDictionary alloc] init];

+ (ClassA *)classAForDocument:(NSDocument *)document
{
    ClassA *classA = [_classCache objectForKey:document];
    if (classA == nil)
    {
       // Initialise with something specific to the document I guess...
        classA = [[ClassA alloc] init];
        [_classCache setObject:classA forKey:document];
    }
    return classA;
}

这只需要 Class{1,2,3} 知道它们所属的文档。

关于objective-c - 在尽可能少的耦合下在许多类之间传递一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11742461/

相关文章:

ios - 在其他 UIView 后面/下面隐藏一个 UIView 并从该 View 中显示

ios - 在曲线中移动 UIImageview

java - 这个静态类实现了什么样的模式?

javascript - 模块化 Promise 和 Promise.all()

objective-c - @dynamic 在 Objective-C 中做了什么?

iOS8后台标准-终止后位置更新

java - 油漆方法是什么?它是如何工作的?

php - 使用不同的共享方法和属性扩展 PHP 类

c++ - 如何在不使用复制构造函数的情况下初始化类成员

c# - 如果接口(interface)调用 Dispose 的实现是否是泄漏抽象