索引

意图

将对一个类的所有对象的管理封装到一个单独的管理器类中。

这使得管理职责的变化独立于类本身,并且管理器还可以为不同的类进行重用。

Encapsulates management of a class’s objects into a separate manager object.

This allows variation of management functionality independent of the class and the manager’s reuse for different classes.

结构

参与者

Subject

  • 领域对象。
  • 提供 Client 需要的领域服务。

Manager

  • Manager 类是唯一负责创建和销毁 Subject 对象的类。它负责跟踪和管理 Subject 对象。
  • 典型的管理职责包括根据指定的 Key 搜索 Subject 对象。
  • 因为 Subject 对 Manager 无引用,所以 Manager 可根据需要修改或子类化。

Client

  • 从 Manager 对象获取 Subject 对象。
  • 使用 Subject 的领域服务。

适用性

当以下情况成立时可以使用 Manager 模式:

  • 当需要对同一个类的所有的对象进行操作时。
  • 当需要按需的创建和销毁对象时。
  • 当需要控制对象的生命周期时。

效果

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

实现

实现方式(一):Manager 模式的示例实现。

 namespace ManagerPattern.Implementation1
{
public class Book
{
public Book(string isbn, string authors, string title)
{
this.ISBN = isbn;
this.Authors = authors;
this.Title = title;
} public string ISBN { get; private set; }
public string Authors { get; private set; }
public string Title { get; private set; } public string Publisher { get; set; }
public Image Cover { get; set; } public string GetTableOfContents()
{
return "something";
}
} public class BookManager
{
private Dictionary<string, Book> _books
= new Dictionary<string, Book>(); public BookManager()
{
} public Book AddBook(string isbn, string authors, string title)
{
Book book = new Book(isbn, authors, title);
_books.Add(book.ISBN, book);
return book;
} public Book GetBookByISBN(string isbn)
{
Book book;
_books.TryGetValue(isbn, out book);
return book;
} public IEnumerable<Book> FindBooksOfAuthor(string author)
{
return _books.Values.Where(b => b.Authors.Contains(author));
}
} public class Client
{
public void TestCase1()
{
BookManager manager = new BookManager();
manager.AddBook("xxxx-xxxx-xxxx", "Dennis Gao", "Good Man");
Book book = manager.GetBookByISBN("xxxx-xxxx-xxxx");
book.GetTableOfContents();
}
}
}

设计模式之美》为 Dennis Gao 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。

设计模式之美:Manager(管理器)的更多相关文章

  1. Django 利用管理器实现文章归档

    Django管理器:class Manager 管理器是Django的模型进行数据库查询的接口,Django应用的每个模型都拥有至少一个管理器.默认情况下,Django为每个模型类添加一个名为obje ...

  2. Django Managers管理器

    Managers class Manager 管理器是向Django模型提供数据库查询操作的接口.Django应用程序中每个模型至少有一个管理器. Manager names 默认情况下管理器的名字为 ...

  3. 设计模式---Manager(管理器)

    设计模式之美:Manager(管理器) 索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这 ...

  4. Manager(管理器)

    Manager(管理器) 索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的 ...

  5. 你需要知道的包管理器(Package Manager)

    最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界. ...

  6. JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults

    Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...

  7. 【jmeter】HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults

    Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...

  8. 微软开放技术发布开源的微软云服务器底盘管理器 (Chasis Manager) 软件

     发布于 2014-07-14 作者 陈 忠岳 今天,微软公司加入开放计算项目(OCP),贡献出硬件和软件规范,管理 API 和协议,机械 CAD 模型,以及电路板文件和 Gerbers(描述印刷 ...

  9. Asp.Net WebApi 使用OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联(No OWIN authentication manager is associated with the request)” 异常的解决办法

    在Asp.Net WebApi 项目中使用OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常: 出现错误. ...

随机推荐

  1. flask-admin众博客概述

    最近用flask admin(https://flask-admin.readthedocs.org/en/latest/)构建自动化发布平台,发现flask admin蛮强大的,基本上不需要自己写太 ...

  2. linux 怎么完全卸载mysql数据库

    在linux下开发,mysql数据库是经常用到的,对于初学者来说,在linux怎么安装卸载mysql数据库,也许可能比较痛苦,这里简单介绍下,怎么卸载msql数据库. a)查看系统中是否以rpm包安装 ...

  3. WinForm开发之取送货管理1

    一.取送货管理项目需求 该系统的业务背景如下:客户是一个针织半成品生产加工作坊,有很多生产加工人员从客户工厂那里取走半成品,加工成成品后送回来.客户根据加工每种半成品的加工单价和完成数量,付费用给生产 ...

  4. XE3随笔15:从XML中解析

    SuperObject 文件包中还有一个 SuperXmlParser 单元, 可以从 XML 中解析出 ISuperObject. SuperXmlParser 只有三个函数: XMLParseSt ...

  5. tkinter 在 x window 下的字体设置格式

    X Font Descriptors # X Font Descriptors are strings having the following format (the asterisks repre ...

  6. AndroidLinker与SO加壳技术之下篇

    点此查看上篇<AndroidLinker与SO加壳技术之上篇> 2.4 链接 链接过程由 soinfo_link_image 函数完成,主要可以分为四个主要步骤: 1. 定位 dynami ...

  7. APP审核被拒,原因总结

    今天早上,突然看到上周末提交的APP,审核被拒了.原以为是因为IPV6审核没过,后来查看原因后发现是,app的3张展示图里面,有些内容显示的有:测试XX等字眼.苹果说提交的版本不能是含有 test,t ...

  8. NPOI导出Excel(含有超过65335的处理情况)

    NPOI导出Excel的网上有很多,正好自己遇到就学习并总结了一下: 首先说明几点: 1.Excel2003及一下:后缀xls,单个sheet最大行数为65335 Excel2007 单个sheet ...

  9. 再牛逼的梦想,也抵不住SB似的坚持

    说起梦想,哪都是好几年前的事了.自从毕业之后,梦想不知道去哪了.可能一次次的失败,找不到了梦想的方向了吧! 自从毕业去了深圳,为了能够在这个城市安稳下来,白天正常上班晚上在街上摆地摊给人下载音乐和电影 ...

  10. PBX220 测评一

    //纯粹个人看法,可能包含非常不恰当的主观看法,敬请见谅. 本次测试的是易用科技Speedytel 新出的产品 PBX-220.      测试环境为:华硕EeePC(IE7).Eyebeam. 先来 ...