看《你必须知道的.NET》有感--工厂模式的另类解读
最近在看博客园里的推荐的《你必须知道的.NET》,对里面有一段关于银行的客户和职员的安排的程序有点兴趣。这里我把他改了下,促进理解:
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace ConsoleApplication1
6{
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 bankManage bank = new bankManage();
12 bank.operate(new savingRequestion());
13 bank.operate(new outingRequest());
14 bank.operate(new turningRequest());
15 Console.ReadKey();
16 }
17 }
18 /**//// <summary>
19 /// 银行业务接口
20 /// </summary>
21 public interface operation
22 {
23 void operate();
24 }
25 /**//// <summary>
26 /// 存钱业务
27 /// </summary>
28 public class savingBox : operation
29 {
30 operation Members#region operation Members
31
32 public void operate()
33 {
34 Console.Write("You are saving!\n");
35 }
36
37 #endregion
38 }
39 /**//// <summary>
40 /// 取钱业务
41 /// </summary>
42 public class outingBox : operation
43 {
44 operation Members#region operation Members
45
46 public void operate()
47 {
48 Console.Write("You are outing!\n");
49 }
50
51 #endregion
52 }
53 /**//// <summary>
54 /// 需求
55 /// </summary>
56 public interface requestion
57 {
58 operation request();
59 }
60 /**//// <summary>
61 /// 存钱需求
62 /// </summary>
63 public class savingRequestion : requestion
64 {
65 requestion Members#region requestion Members
66
67 public operation request()
68 {
69 return new savingBox();
70 }
71
72 #endregion
73 }
74 /**//// <summary>
75 /// 取钱需求
76 /// </summary>
77 public class outingRequest : requestion
78 {
79 requestion Members#region requestion Members
80
81 public operation request()
82 {
83 return new outingBox();
84 }
85
86 #endregion
87 }
88 /**//// <summary>
89 /// 银行管理
90 /// </summary>
91 public class bankManage
92 {
93
94 public void operate(requestion man)
95 {
96 operation oper = man.request();
97 oper.operate();
98 }
99 }
100 /**//// <summary>
101 /// 转账业务
102 /// </summary>
103 public class turningBox : operation
104 {
105 operation Members#region operation Members
106
107 public void operate()
108 {
109 Console.Write("you are turning!\n");
110 }
111
112 #endregion
113 }
114 /**//// <summary>
115 /// 转账需求
116 /// </summary>
117 public class turningRequest : requestion
118 {
119 requestion Members#region requestion Members
120
121 public operation request()
122 {
123 return new turningBox();
124 }
125
126 #endregion
127 }
128}
类图:
如果我们屏蔽设计模式在本银行系统中的应用,单从供求关系来理解这段程序最好不过了,对于一个银行系统来说,主要包含职员和客户,职员按分工的不同分为诸如存款职员、转账职员、取款职员等,客户又分为存款客户、取款客户、转账客户等,从这方面来讲,似乎更难理解,换种方式,将银行系统分为需求和业务,客户对应需求,每个银行的客户都会对银行产生一种需求;银行提供的服务既是业务,职员对应业务;于是这样产生一个自然界的恒等式,即需求=业务,如果客户没有需求,那么银行就不会提供该种业务;所以在程序中不论用户的存款、取款、转账需求,最终都将return一个银行业务,单对于每一个业务的处理过程(operate),由于是银行内部的事情,所以应封装在业务类中,中间采用一个银行管理对象来(bankManage)连接二者之间的交互过程。
转载于:https://www.cnblogs.com/cdutedu/archive/2008/08/27/HelloWorld.html
看《你必须知道的.NET》有感--工厂模式的另类解读相关推荐
- 一本你必须知道的.net
<你必须知道的.NET> 作者简介:王涛 微软C# MVP,高级软件工程师,机械工程硕士,主要研究方向为.NET底层架构和企业级系统应 用.现就职于某软件公司负责架构设计.软件开发和项目管 ...
- 歪果仁眼中的中国科技界必须知道的7件事
注:本文来自Medium, 中文版由天地会珠海分舵编译.文章中有些观点可能存在偏颇,请读者自行决断. 中国是个神奇的国度,有很多东西是歪果仁所不知道的.以下列出在中国科技界你必须知道的7个事实. 中国 ...
- 你必须知道的.net学习总结
着几天在看<你必须知道的.net>,这次看书和以往不同,以前是把自己喜欢的章节看了.但是这次决定把一本书详细的看看. 在第一章第一节中主要讲的是"对象",我想每一个程序 ...
- 数据科学中必须知道的5个关于奇异值分解(SVD)的应用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 前言:本文为大家介绍了5个关于奇异值 ...
- [你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考
发布日期:2008.8.27 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 走钢丝的人,在刺激中体验快感.带着问题思考,在问 ...
- [你必须知道的.NET]第二十一回:认识全面的null
<你必须知道的.NET>网站 | Anytao技术博客 [你必须知道的.NET]第二十一回:认识全面的null 发布日期:2008.7.31 作者:Anytao © 2008 Anyta ...
- 每个程序员都必须知道的8种数据结构
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://suo.im/6oo92L 快速 ...
- 作为软件工程师,你必须知道的20个常识
1.针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开发, 简短的 OOAD 与它的 SOLID 原则对于每一个软件工程师来说都是该牢记的. 2.软件品质因素:软件工程的好坏与软件 ...
- 【转】[你必须知道的.NET]第二十一回:认识全面的null
引用自:http://www.cnblogs.com/anytao/category/155694.html 作者:Anytao . 说在,开篇之前 null. nullable.??运算符.null ...
最新文章
- 在CSDN中增加图片版权保护的方法
- 软工实践第三次作业(结对第一次作业)
- 网络教育计算机二级题库2021,2021计算机二级office
- Coursera课程Python for everyone:chapter3
- 2017python学习的第五天:模块
- Angular2项目中浏览器拦截弹出窗口的解决方法
- 对 js 高程 Preflighted Reqeusts 的理解
- 压缩图片上传到数据库
- myftpadmin+proftpd+mysql架设ftp服务器_[教程]在CentOS7上配置 FTP服务器 Proftpd 支持 MySQL 虚拟用户加密认证以及磁盘限额(Quota)...
- 从零基础入门Tensorflow2.0 ----四、12. tf_data基础api使用
- 再遇soundmix.dll,小试pe_xscan
- java 多线程m3u8下载
- 关于全国大学生软件测试大赛总结与反思
- Java-Specification
- Supervisor管理springboot应用
- Vue 2.x折腾记 - (15) 捣鼓一个中规中矩loading组件
- 数字图像处理与Python实现-图像几何变换-图像金字塔
- 原来微信显示“对方正在输入”,还有这样的含义,真的让人很扎心
- Feburary——1052.爱生气的书店老板
- 论文笔记-Optimized flocking of autonomous drones in confined environments
热门文章
- 解决python时间戳最大为3001年1月1日15时59分59秒的问题
- Python 技术篇-利用pyqt5库监听剪切板变动,clipboard.dataChanged.connect()剪切板监听
- 把浮点数转为字符串(隐形把数据进行四舍五入)
- his系统oracle多少钱,医院信息系统怎样为医改调价做准备:HIS费用功能应用情况调查告诉您...
- Excel较大规模数据处理实例(可直接用)python实现
- Python:cv2.imread读入图片后返回NoneType的解决方案
- set_union()和set_intersection()的用法
- 搭建helm私服ChartMuseum
- 在SAE搭建Python+Django+MySQL(基于Windows)
- MySQL知识点链接