Managers

作者: 奎章 | 来源:发表于2017-10-25 00:38 被阅读35次

    概述

    管理器模式

    Managers提供一个统一的接口,用于管理和访问一组相关对象的实例化和访问,使得管理职责的变化独立于某个具体类。是管理其他实例类的 管理者,某些场景也可以充当MVC中的C的角色。(其实是单利模式的扩展,就是自己mange自己,并且确保被管理者是唯一的)在Cocoa 或者Cocoa Touch中包括NSFileManager、NSInputManager、NSLayoutManager等类。

    结构

    参与者
    Subject(也可以理解成单一功能的manger)
    • 领域对象。
    • 提供 Client 需要的领域服务。
    Manager(当管理多个manger时候,这个最外层manger一般要求唯一的单例)
    • Manager 类是唯一负责创建和销毁 Subject 对象的类。它负责跟踪和管理 Subject 对象。
    • 典型的管理职责包括根据指定的 Key 搜索 Subject 对象。
    • 因为 Subject 对 Manager 无引用,所以 Manager 可根据需要修改或子类化。
    Client
    • 从 Manager 对象获取 Subject 对象。
    • 使用 Subject 的领域服务。

    适用性

    我们来讨论一下使用场景。有一组对象需要是唯一的,但同时不是单例对象的情况,这是很常见的。比如字体(比如方正雅黑之类的)。系统需要使用不同的字体,所以封装的字体对象可能会多次实例化,因此不能用单例。但同时,我们又不希望同一个字体同时出现多个实例。
    这样我们就希望,请求特定的字体类型返回特定的实例,同时也希望添加了字体系统可以了解到(CTFontManagerRegisterGraphicsFont)。

    当以下情况成立时可以使用 Manager 模式:
    • 当需要对同一个类的所有的对象进行操作时。
    • 当需要按需的创建和销毁对象时。
    • 当需要控制对象的生命周期时。

    效果

    • 可以对全部对象进行统计。
    • 管理职责可以无依赖的变化。
    • 可以按需替换管理职责。
    • 管理职责可以得到重用

    讨论

    管理者模式是其他一些模式(如单例、外观和控制器)的融合与一般化。许多管理者在应用程序内执行类似于控制器的功能。 在Cocoa中遇到以“Manager”结尾的类名时,就暗示了它的一个或多个角色。在自定义的代码中,当需要用于管理其他类的多个实例的类时,要想解耦推荐使用管理者,尤其是在需要确保唯一性时。例如某个控制器里会各种类似功能的实体,那么就可以抽象出一个manger来管理这些实体(Subject),manger开放client提供Register UnRegister接口。

    相关文章

      网友评论

          本文标题:Managers

          本文链接:https://www.haomeiwen.com/subject/pbxfpxtx.html