工厂模式学习心得及我的项目应用
一、学习笔记:
下面的例子参见TerryLee的Blog。
应用场景:(1个场景的若干要点)
1。工资核算系统。
2。工资=奖金+税收+4000(基本工资)。这个公式各国通用。
3。其中,奖金=4000×0.2;税收=4000×0.1
4.将要面临的变化点:若软件应用到了美国。美国的工资也是 工资=奖金+税收+4000(基本工资)。
但是美国的奖金=工资×0.4;税收=奖金×0.2;
5.更加难度的变化:不知道以后会卖到哪个国家,也不知道未来国家的奖金和税收的计算方法。
设计经历:
1 第一次设计:
当系统实现“应用场景4”(即从中国转移到美国)时候,需要修改Client类。
/*尚未搞懂的问题,就是如果Client调用的方法为 ITax tax= new ChineseTax();
那么,ChinesTax类中的特有方法――并非从接口实现的方法,就无法调用了。
还是说,我本身对“接口”这个定义的理解就有错误,实现接口的类,最好没有自己特有的方法。
*/
2 第二次设计
增加了Factory:
说明:factory帮助Client选择到底是哪个Tax和Bonus。这时候的工厂其实是一个具体工厂。
当系统实现“应用场景4”(即从中国转移到美国)时候,需要修改Factroy类。
3.第三次设计
将工厂变化为抽象工厂
/*说明:映射的代码:
stringfactoryName=Constant.STR_FACTORYNAME.ToString();
AbstractFactoryinstance;if(factoryName!="")
instance=(AbstractFactory)Assembly.Load(factoryName).CreateInstance(factoryName);
*/ 当系统实现“应用场景4”(即从中国转移到美国)时候,需要修改配置文件。
当系统实现“应用场景5”(增加另外一个国家)时候,需要修改配置文件。
二、学习心得:
抽象工厂的缺陷(尚不确定):
1.上个例子中的ChineseTax不能有自己独立的方法,只能有ITax的中所继承到的方法。
2.要创建很多工厂,类的数量增多。
三、项目应用应用场景:(1个)
1。公司网站系统。
2.在这个系统中,有如下几个类:用户、新闻、通知、留言、案例、站内信
3 由于系统比较简单,每个类都只有增、删、改、查四个方法就够了。
4 网站前台用于展示,后台用于修改、删除。
5 网站的前台基本都是2种页面:多条记录页面(主体是一个GridView),单条记录页面(用于显示明细);
网站后台基本上是2个页面:多条记录页面(主要用来删除和搜索),单条记录页面(主要用来修改和添加)。
6 需要改进的地方:现在我们给“文章”写了一个前台的“多条记录页面”,
给通知写了一个前台的“多条记录页面”,给留言写了一个前台的“多条记录页面”,
给站内信写了一个前台的“多条记录页面”。。。但是代码重复的地方非常多:
每个页面都要给GriedView写一个翻页的方法,每个页面都是在PageLoad()方法里面绑定数据。
后台也一样。现在希望改进网站代码,
不需要这么多页面。用一个页面统一显示多条记录,用一个页面统一显示详细页面。。。后台页面同理。
7 难点:每个页面不重复的代码在于每个GriedView的绑定列不同。单条记录页面的绑定字段不同。
解决方案:
每个页面通过读取URL字符串,获取一个信息――该页要显示什么,并且动态配置该页。
每个页面的需要变化的控间通过读取URL的字符串,获取一个信息――该如何显示。
下面给出了类图:(以多条列表页面为例子、多条列表页面的GridView控件为例子。
其实每个页面都应该有一个工厂,页面上每一个需要变化的页面都需要一个工厂。)
说明:
1。对页面来说,应该传布局信息;对于控件来说,应该传数据信息
2。如何绑定GriedView: Select()方法返回一个IList,用于数据返回。
而每个IList都是一个BaseProperty的数组,里面有一个BindMessage属性,
返回的是一个String,表示一个xml的路径,这个xml表示的是对GriedView的绑定列的规则。
分享到:
相关推荐
摘要:电子书籍,C#教程,设计模式 设计模式:基于C#的工程化实现及扩展 pdf全书下载,本书作者以C#重新实现了GOF的模式,同时加入了新近的设计想法,如SOA与Web Services.....等,同时还有相对于其他设计模式而言较新...
文章地址:https://blog.csdn.net/mazhiyuan1981/article/details/110196482
C# 设计模式.pdf 文档。无论您是新手,还是老手,本教程都值得一读。对于那些具有丰富的开发经验的开发人员,学习设计模式有助于了解在软件开发过程中所面临的问题的最佳解决方案;对于那些经验不足的开发人员,学习...
设计模式:基于C#的工程化实现及扩展
C#设计模式:抽象工厂实例解析.7zC#设计模式:抽象工厂实例解析.7z
C#设计模式(2) 11 一、 "开放-封闭"原则(OCP) 12 二、 里氏代换原则(LSP) 12 C#设计模式(3) 19 三、 依赖倒置原则(DIP) 19 四、 接口隔离原则(ISP) 20 五、 合成/聚合复用原则(CARP) 21 六、 迪米特法则...
C#计算器 简单工厂设计模式 C#计算器 简单工厂设计模式
设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式
文章地址:https://blog.csdn.net/mazhiyuan1981/article/details/110225903
c#几种常用的设计模式,包括单例模式、监视着模式、工厂方法模式和抽象工厂模式
C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式) C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) C#面向...
设计模式 C# 简单工厂模式,又叫做静态工厂方法模式,这是一个很简单的模式,它不属于GOF二十三个基本模式之中的一个,但它是一个很有用的模式,有用得着的时候可以使用它。
c#设计模式 工厂模式 抽象工厂(Abstract Factory)模式 引进抽象工厂模式
新版设计模式手册 - C#设计模式(第二版)
C#简单登录演示抽象工厂设计模式,他具体而简单的把抽象工厂设计模式描绘出来了!
C#面向对象设计模式纵横谈(25):设计模式总结
是一本介绍设计模式的书,还附加了1本C#描述设计模式的书。(需要1分)
完全由C#语言来描述的设计模式,是从事.NET开发的程序开发,设计人员必读书籍
C#设计模式(2) 一、 "开放-封闭"原则(OCP) 二、 里氏代换原则(LSP) C#设计模式(3) 三、 依赖倒置原则(DIP) 四、 接口隔离原则(ISP) 五、 合成/聚合复用原则(CARP) 六、 迪米特法则(LoD) C#设计...
第7篇主要是一些针对Web和Web Service领域的模式设计技术。 本书主要针对对C#语言和.NET Framework平台有一定了解或有一定应用经验的用户,尤其适于那些希望运用模式技术在设计和开发方面多应对些挑战的用户。