最近在看博客园里的推荐的《你必须知道的.NET》,对里面有一段关于银行的客户和职员的安排的程序有点兴趣。这里我把他改了下,促进理解:

Code
  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》有感--工厂模式的另类解读相关推荐

  1. 一本你必须知道的.net

    <你必须知道的.NET> 作者简介:王涛 微软C# MVP,高级软件工程师,机械工程硕士,主要研究方向为.NET底层架构和企业级系统应 用.现就职于某软件公司负责架构设计.软件开发和项目管 ...

  2. 歪果仁眼中的中国科技界必须知道的7件事

    注:本文来自Medium, 中文版由天地会珠海分舵编译.文章中有些观点可能存在偏颇,请读者自行决断. 中国是个神奇的国度,有很多东西是歪果仁所不知道的.以下列出在中国科技界你必须知道的7个事实. 中国 ...

  3. 你必须知道的.net学习总结

    着几天在看<你必须知道的.net>,这次看书和以往不同,以前是把自己喜欢的章节看了.但是这次决定把一本书详细的看看. 在第一章第一节中主要讲的是"对象",我想每一个程序 ...

  4. 数据科学中必须知道的5个关于奇异值分解(SVD)的应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 前言:本文为大家介绍了5个关于奇异值 ...

  5. [你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

    发布日期:2008.8.27 作者:Anytao  © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 走钢丝的人,在刺激中体验快感.带着问题思考,在问 ...

  6. [你必须知道的.NET]第二十一回:认识全面的null

    <你必须知道的.NET>网站 | Anytao技术博客  [你必须知道的.NET]第二十一回:认识全面的null 发布日期:2008.7.31 作者:Anytao © 2008 Anyta ...

  7. 每个程序员都必须知道的8种数据结构

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://suo.im/6oo92L 快速 ...

  8. 作为软件工程师,你必须知道的20个常识

    1.针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开发, 简短的 OOAD 与它的 SOLID 原则对于每一个软件工程师来说都是该牢记的. 2.软件品质因素:软件工程的好坏与软件 ...

  9. 【转】[你必须知道的.NET]第二十一回:认识全面的null

    引用自:http://www.cnblogs.com/anytao/category/155694.html 作者:Anytao . 说在,开篇之前 null. nullable.??运算符.null ...

最新文章

  1. 在CSDN中增加图片版权保护的方法
  2. 软工实践第三次作业(结对第一次作业)
  3. 网络教育计算机二级题库2021,2021计算机二级office
  4. Coursera课程Python for everyone:chapter3
  5. 2017python学习的第五天:模块
  6. Angular2项目中浏览器拦截弹出窗口的解决方法
  7. 对 js 高程 Preflighted Reqeusts 的理解
  8. 压缩图片上传到数据库
  9. myftpadmin+proftpd+mysql架设ftp服务器_[教程]在CentOS7上配置 FTP服务器 Proftpd 支持 MySQL 虚拟用户加密认证以及磁盘限额(Quota)...
  10. 从零基础入门Tensorflow2.0 ----四、12. tf_data基础api使用
  11. 再遇soundmix.dll,小试pe_xscan
  12. java 多线程m3u8下载
  13. 关于全国大学生软件测试大赛总结与反思
  14. Java-Specification
  15. Supervisor管理springboot应用
  16. Vue 2.x折腾记 - (15) 捣鼓一个中规中矩loading组件
  17. 数字图像处理与Python实现-图像几何变换-图像金字塔
  18. 原来微信显示“对方正在输入”,还有这样的含义,真的让人很扎心
  19. Feburary——1052.爱生气的书店老板
  20. 论文笔记-Optimized flocking of autonomous drones in confined environments

热门文章

  1. 解决python时间戳最大为3001年1月1日15时59分59秒的问题
  2. Python 技术篇-利用pyqt5库监听剪切板变动,clipboard.dataChanged.connect()剪切板监听
  3. 把浮点数转为字符串(隐形把数据进行四舍五入)
  4. his系统oracle多少钱,医院信息系统怎样为医改调价做准备:HIS费用功能应用情况调查告诉您...
  5. Excel较大规模数据处理实例(可直接用)python实现
  6. Python:cv2.imread读入图片后返回NoneType的解决方案
  7. set_union()和set_intersection()的用法
  8. 搭建helm私服ChartMuseum
  9. 在SAE搭建Python+Django+MySQL(基于Windows)
  10. MySQL知识点链接