- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HYPERLINK /shenfx318/archive/2007/01/09/614844.html 疑惑?改良? 从简单工厂到工厂方法
写在前面
最近一段时间在研究有关设计模式方面的文章,拜读了TerryLee以及吕震宇两位老师所写的设计模式方面的系列文章,收获颇丰,也让我对OOP,OOD有了新的理解和认识,不过在看到工厂方面的几篇文章时,却总有个地方想不通,望各位老师专家能替在下答疑解惑,以下是自己对工厂模式的一些理解以及提出的一种改良方案,不知道是否有人提出过类似的方案,如有雷同纯属巧合。有说得不对的地方还请批评指正。?
从简单工厂说起
严格来讲简单工厂并不属于GOF的23个设计模式之一,但它之所以存在而被人们广泛认知的原因,我想是由于它在一定程度上简化了工厂方法(Factory Method)与抽象工厂(Abstract Factory)的模式,从而可以带给新手对于工厂模式设计的精髓最直观的认识,是不少人接触工厂模式的奠基石,理解了简单工厂的设计理念及实现方法再去理解相对复杂的工厂方法与抽象工厂有着水到渠成的效果。
先来看看简单工厂的类关系图:
简单工厂一般以如下方式实现:
?1?????public?class?SimpleFactory?2?????{?3?????????///?summary?4?????????///?Get?the?right?product?base?on?the?paoductcategory?parameter.?5?????????///?/summary?6?????????///?param?name=productCategory/param?7?????????///?returns/returns?8?????????public?static?IProduct?CreateProduct(string?productCategory)?9?????????{10?????????????switch?(productCategory)11?????????????{12?????????????????case?A:13?????????????????????return?new?ProductA();14?????????????????case?B:15?????????????????????return?new?ProductB();16?????????????????case?C:17?????????????????????return?new?ProductC();18?????????????????default:19?????????????????????throw?new?Exception(Not?a?valid?product?category!);20?????????????????????return?null;21?????????????}22?????????}23?????}
客户对于简单工厂的使用
?1?????public?class?Client?2?????{?3?????????public?void?Do()?4?????????{?5?????????????//Create?a?productA?6?????????????IProduct?product?=?SimpleFactory.CreateProduct(A);?7?????????????//Product?doing?its?tasks.?8?????????????product.ExecuteFunction1();?9?????????????product.ExecuteFunction2();10?????????????product.ExecuteFunction3();11?????????????product.ExecuteFunction4();12?????????????//More?tasks?.13?????????}14?????}
这时,如果客户打算改为生产产品B,那么他需要做的仅仅是修改传入工厂的参数,以告诉工厂需要生产什么而对于后面产品所实现的功能不需要做任何的修改。简单工厂模式的最大优点在于工场模式包含了必要的判断逻辑,可以根据客户的需求动态生成客户所需要的产品,而在客户方面,免除了客户对具体产品创建的依赖,一句话:简单工场实现了对责任的分割。??? 说完了优点再来说说缺点,如果现在新增加了一种产品称作ProductC怎么办?OK,我们添加类ProductC、实现IProduct接口(注意,这个是由于新的业务规则所带来的变化,是任
文档评论(0)