C#描述设计模式(2):工厂模式学习心得及我的项目应用
来源:互联网 发布:六小龄童知乎 编辑:程序博客网 时间:2024/06/05 07:25
工厂模式学习心得及我的项目应用
一、学习笔记:
下面的例子参见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.第三次设计
将工厂变化为抽象工厂
/*说明:映射的代码:
string factoryName = Constant.STR_FACTORYNAME.ToString();
AbstractFactory instance; if(factoryName != "")
instance = (AbstractFactory)Assembly.Load(factoryName).CreateInstance(factoryName);
AbstractFactory instance; 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#描述设计模式(2):工厂模式学习心得及我的项目应用
- 设计模式之工厂模式的学习心得
- C#描述设计模式(3):创建者模式学习心得
- 设计模式C#描述之——简单工厂模式
- 设计模式C#描述——工厂方法模式
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述之—简单工厂模式
- 设计模式C#描述之——简单工厂模式
- 设计模式C#描述——工厂方法模式
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述之——简单工厂模式
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述之――简单工厂模式
- 设计模式C#描述——抽象工厂模式
- 设计模式C#描述——工厂方法模式
- 设计模式C#描述之——简单工厂模式
- 要是李宇春也作隆胸?
- RFT测试脚本
- 常用代码
- Windows用户界面编程中的界面闪烁问题
- 交换编程——结对编程的延伸实践
- C#描述设计模式(2):工厂模式学习心得及我的项目应用
- GDI+中的圆角矩形
- VBA快速上手-常用对象之使用
- 京、沪、汉市民性格特质比较
- The solution of weblogic webservice Exception.
- 如何理解装配件、元数据、PE文件和持久化 ?
- 定制functional tester,使其更易使用
- LR(1)分析法 ---编译原理-----
- 看别人的日子