设计模式之美:Manager(管理器)

索引

意图

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

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

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 模式的示例实现。

 1 namespace ManagerPattern.Implementation1
2 {
3 public class Book
4 {
5 public Book(string isbn, string authors, string title)
6 {
7 this.ISBN = isbn;
8 this.Authors = authors;
9 this.Title = title;
10 }
11
12 public string ISBN { get; private set; }
13 public string Authors { get; private set; }
14 public string Title { get; private set; }
15
16 public string Publisher { get; set; }
17 public Image Cover { get; set; }
18
19 public string GetTableOfContents()
20 {
21 return "something";
22 }
23 }
24
25 public class BookManager
26 {
27 private Dictionary<string, Book> _books
28 = new Dictionary<string, Book>();
29
30 public BookManager()
31 {
32 }
33
34 public Book AddBook(string isbn, string authors, string title)
35 {
36 Book book = new Book(isbn, authors, title);
37 _books.Add(book.ISBN, book);
38 return book;
39 }
40
41 public Book GetBookByISBN(string isbn)
42 {
43 Book book;
44 _books.TryGetValue(isbn, out book);
45 return book;
46 }
47
48 public IEnumerable<Book> FindBooksOfAuthor(string author)
49 {
50 return _books.Values.Where(b => b.Authors.Contains(author));
51 }
52 }
53
54 public class Client
55 {
56 public void TestCase1()
57 {
58 BookManager manager = new BookManager();
59 manager.AddBook("xxxx-xxxx-xxxx", "Dennis Gao", "Good Man");
60 Book book = manager.GetBookByISBN("xxxx-xxxx-xxxx");
61 book.GetTableOfContents();
62 }
63 }
64 }

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

转自:http://www.cnblogs.com/gaochundong/p/design_pattern_manager.html

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

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

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

  2. Django Managers管理器

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

  3. 设计模式之美: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. TCP/IP 和HTTP 协议基础知识

    来源:http://www.myhack58.com/Article/60/63/2014/50072.htm 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过 ...

  2. js预编译

    先来做三个测试 eg1: var a; a = 1; function a() {}; console.log(a); eg2: var a; function a() {}; console.log ...

  3. jquery1.8.3和1.11.3的用法区别

    学习js啦dom的对象 发现好复杂 不够简洁 所以我就用法强大的jquery来做功课 突然就遇到attr的方法对复选属性的checked取不了值 给我返回undefined 我查好久都没查出问题 结果 ...

  4. 简单的JDBC连接oracle数据库例子

    java连接Oracle数据库 JDBC(Java Data Base Connectivity,java数据库连接),那么我们该如何用java进行数据库的连接呢. import java.sql.C ...

  5. 转载 Deep learning:一(基础知识_1)

    前言: 最近打算稍微系统的学习下deep learing的一些理论知识,打算采用Andrew Ng的网页教程UFLDL Tutorial,据说这个教程写得浅显易懂,也不太长.不过在这这之前还是复习下m ...

  6. MySQL python组件安装

    可使用pip进行安装 pip install MySQL-python 如出现以下错误 _mysql.c::: 错误:my_config.h:没有那个文件或目录 _mysql.c::: 错误:mysq ...

  7. Sublime Text: [Decode error - output not utf-8]

    今天编译Python时, 输出窗口信息出现: [Decode error - output not utf-8][Decode error - output not utf-8]   发现是print ...

  8. WebViewJavascriptBridge详细使用

    前言 WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲 ...

  9. 找最大重复次数的数和重复次数(C++ Pair)

    Problem A: 第一集 你好,世界冠军 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 265  Solved: 50[Submit][Statu ...

  10. Qt之Windows开发移植问题汇总

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101auw6.html 在用Qt开发完成项目后,就需要将其打包并且移植在其他机器上,能在其他PC机上正常跑起来才 ...