首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 工厂模式学习心得及我的项目应用
【标  题】:工厂模式学习心得及我的项目应用
【关键字】:
【来  源】:http://blog.csdn.net/xxpyeippx/archive/2006/12/06/1432117.aspx

工厂模式学习心得及我的项目应用

工厂模式学习心得及我的项目应用
一、学习笔记:
下面的例子参见TerryLee的Blog。
应用场景: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);   
*/
当系统实现“应用场景4”(即从中国转移到美国)时候,需要修改配置文件。
当系统实现“应用场景5”(增加另外一个国家)时候,需要修改配置文件。
二、学习心得:
抽象工厂的缺陷(尚不确定):
1.上个例子中的ChineseTax不能有自己独立的方法,只能有ITax的中所继承到的方法。
2.要创建很多工厂,类的数量增多。
三、项目应用
应用场景: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的绑定列的规则。
 
单件模式的疑惑:【上一篇】
dbms_stats包:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • C++事件(Event)机制的实现一例[源代码下载链接已修复]
  • Asp.net页面的生命周期究竟有那些?
  • install sybase for solaris10
  • LINUX 中文字体使模糊变清晰
  • 纯ASP结合VML生成完美图-柱图
  • ASP.NET应用程序规划与设计(4)
  • Effective Java 31-45
  • php技术文档无法显示的问题。
  • TEW-310APB 22兆网桥带SMA
  • 四种方法实现VC枚举系统当前进程[转载]
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.