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 发布于博客园的系列文章,任何未经作者本人同意的人为或爬虫转载均为耍流氓。
当前标签: Design Pattern
Manager(管理器)的更多相关文章
- Django 利用管理器实现文章归档
Django管理器:class Manager 管理器是Django的模型进行数据库查询的接口,Django应用的每个模型都拥有至少一个管理器.默认情况下,Django为每个模型类添加一个名为obje ...
- Django Managers管理器
Managers class Manager 管理器是向Django模型提供数据库查询操作的接口.Django应用程序中每个模型至少有一个管理器. Manager names 默认情况下管理器的名字为 ...
- 你需要知道的包管理器(Package Manager)
最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界. ...
- 设计模式之美:Manager(管理器)
索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这使得管理职责的变化独立于类本身,并且管理 ...
- JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...
- 【jmeter】HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...
- 微软开放技术发布开源的微软云服务器底盘管理器 (Chasis Manager) 软件
发布于 2014-07-14 作者 陈 忠岳 今天,微软公司加入开放计算项目(OCP),贡献出硬件和软件规范,管理 API 和协议,机械 CAD 模型,以及电路板文件和 Gerbers(描述印刷 ...
- 设计模式---Manager(管理器)
设计模式之美:Manager(管理器) 索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这 ...
- Asp.Net WebApi 使用OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联(No OWIN authentication manager is associated with the request)” 异常的解决办法
在Asp.Net WebApi 项目中使用OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常: 出现错误. ...
随机推荐
- 一个由proguard与fastJson引起的血案(转)
更新微信sdk导致ComposeData中的内部类ComposeDataSender方法被混淆 根本原因,fastjson使用姿势不对. 问题描述: 一个发件人列表里,应当呈现的数据(这里命名为Com ...
- java自动转型
/*2015-10-30*/ public class TypeAutoConvert { public static void main(String[] args) { int a = 5; Sy ...
- 从客户端(FCKeditor1="<p>...")中检测到有潜在危险的 Request.Form 值。
从客户端(FCKeditor1="<p>...")中检测到有潜在危险的 Request.Form 值. 说明: 请求验证过程检测到有潜在危险的客户端输入值,对请求的处理 ...
- Controller与Action
Controller与Action 我们知道在MVC5和之前的版本,两个框架的生命周期是不一样的,在新版MVC6中,MVC Controller/Web API Controller已经合二为一了,本 ...
- WeakReference and WeakHashMap
弱引用通过WeakReference类实现,弱引用和软引用很像,但弱引用的引用级别更低.对于只有弱引用的对象而言,当系统垃圾回收机制运行时,不管系统北村是否足够,总会回收该对象所占用的内存.当然,并不 ...
- Web文件(图片)上传方法
在开放Web应用程序的时候经常会遇到图片或者是文件上传的模块,这里就是该模块的实现的后台方法 上传图片方法 /// <summary> /// 功能:上传图片方法 /// </sum ...
- cocos2dx 3.0正式版 于mac在新建项目
下载cocos2dx 3.0正式版,和安装python2.7.*版本号. 加入cocos命令: mac下: 在cocos2d-x\tools\cocos2d-console\bin文件夹下.执行ins ...
- TRIZ系列-创新原理-28-替代机械系统原理
替代机械系统原理的详细描写叙述例如以下:1)用光.声.热.嗅觉系统替代机械系统:2)用电.磁或电磁场来与物体交互作用:3)用移动场替代精巧场,用随时间变化的场替代固定场,用结构化的场替代随机场:4)使 ...
- Android 数据库加密
一 一个简短的引论 SQLite是一个轻量的.跨平台的.开源的数据库引擎.它的读写效率.资源消耗总量.延迟时间和总体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方式(如Android.i ...
- 刚学unity3d,跟着仿作了flappy bird,记下一些琐碎的心得!
1.关于场景,即scene. 一个正常的游戏至少要有三个场景,即菜单(或者文件夹)场景.游戏关卡场景.游戏结束场景.它们一般统一放在project文件夹下scene文件夹(自己创建)中,方便管理. 1 ...