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

索引

  • 意图

  • 结构

  • 参与者

  • 适用性

  • 效果

  • 实现
    • 实现方式(一):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
 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。

设计模式之美:Manager(管理器),布布扣,bubuko.com

时间: 2024-08-24 07:21:48

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

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

最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界.全世界所有的开发人员都可以将自己觉得有用的组件或者软件发布到一个共用的地方,其他的所有人都可以很方便地按需取用. 让我们记住Richard Stallman 以及他提出并创立的GNU计划.http://baike.baidu.com/view/36272.htm   在Linux系统中,包管理器是如

Windows Restart Manager 重启管理器

Restart Manager(以下简称RM)可以减少或避免安装或更新程序所需要的系统重启次数.安装(或更新)过程中需要重启的主要原因是需要更新的某些文件当前正被一些其它程序或服务所使用.RM允许除关键系统服务(Critical System Services)之外的所有程序(或服务)关闭和重启.这将释放正在使用的文件从而使安装得以完成. RM DLL导出了一组可供安装包使用的C接口.安装包可以向RM注册安装过程中需要被替换的文件列表,随后,安装包可以通过RM来判断其中哪些文件正在使用:RM可以

【转】JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults

Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTTP Header Manager.HTTP Request Defaults等,这些是什么呢? JMeter不是浏览器,因此其行为并不和浏览器完全一致.这些JMeter提供的HTTP属性管理器用于尽可能模拟浏览器的行为,在HTTP协议层上定制发送给被测应用的HTTP请求. (1)HTTP Reque

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

Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTTP Header Manager.HTTP Request Defaults等,这些是什么呢? JMeter不是浏览器,因此其行为并不和浏览器完全一致.这些JMeter提供的HTTP属性管理器用于尽可能模拟浏览器的行为,在HTTP协议层上定制发送给被测应用的HTTP请求. (1)HTTP Reque

使用缓存管理器,尽你之能力(Cache Me if You Can: Using the NT Cache Manager )

在pediy.com发了一篇译文,简单转载这里. 缓存管理器属于NT内存管理器紧密集成的软件组件,与虚拟内存系统集成文件系统缓存数据. 好处是物理内存的使用和文件缓存和系统运行程序在缓存管理器下达到均衡应用. 另一个使用缓存关键原因是文件可被标准文件系统接口存取,如read和write等.或通过内存管理器形成一个"内存映射"文件. 缓存管理器数据结构:下段描述文件系统和缓存管理器共享的数据结构. Buffer Control Bloxk (BCB) Most of the buffer

Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)

Visual State Manager,中文又称视觉状态管理器(简称为VSM),是Silverlight 2中引进的一个概念.通过使用VSM,开发人员和设计人员可以轻松的改变项目控件的视觉效果,在项目中VSM主要用于创建自定义控件以及控件模板.为了能够打造个性绚丽的Silverlight项目,学习掌握VSM是非常必要的.本文将介绍VSM的快速入门知识以及VSM在Blend中的使用方法. 在学习VSM前,首先,了解以下几个基本概念: 正如前文所说,VSM视觉管理器是用户控制项目控件的视觉效果,S

Python上下文管理器(context manager)

上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语法形式是with...as... # with context manager with open("new.txt", "w") as f: print(f.closed) f.write("Hello World!") print(f.close

[搬运工系列]-JMeter(八)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults

Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTTP Header Manager.HTTP Request Defaults等 启动jmeter,默认有一个测试计划,然后,修改计划名称,尽量使其变得有意义,容易看懂,然后,新建一个线程组 这里线程数我设置为1,方便演示 然后,添加一个http信息头管理器 这里解释一下为什么要添加http信息头管理

NPM - Node Package Manager - Node 包管理器

NPM - Node Package Manager - Node 包管理器 NPM 是什么? npm(全称Node Package Manager,即node包管理器)是Node.js默认的.以JavaScript编写的软件包管理系统. npm 官方网站 npm 官方文档 一般当我们说npm的时候可能指3件事 NPM 网站:https://www.npmjs.com/ NPM 包管理库,存储了大量的JavaScript代码库 NPM 客户端,我们所使用的npm命令行工具.使用JavaScrip