设计模式之C#简单工厂模式.docx

设计模式之C#简单工厂模式.docx

ID:52356297

大小:15.89 KB

页数:5页

时间:2020-03-26

设计模式之C#简单工厂模式.docx_第1页
设计模式之C#简单工厂模式.docx_第2页
设计模式之C#简单工厂模式.docx_第3页
设计模式之C#简单工厂模式.docx_第4页
设计模式之C#简单工厂模式.docx_第5页
资源描述:

《设计模式之C#简单工厂模式.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、前言:设计模式是软件开发领域的精髓之一。学好设计模式是目前每一个开发人员的必修课。目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并不很适合初学者。还有一本是《JAVA与模式》,比较适合初学者使用,在此强烈推荐。但这本书的不足之处是一些地方讲的过于繁琐,很多地方只须简单说明一下即可,却大费笔墨,使得书籍很厚,看起来费力。而且是用JAVA描述的,这使得一些只懂C#的人无从下手。我是一个.net的拥护者,为了看这本书我特意看了些JAVA的书,感觉JAVA在书籍的多样性方面比.net好很多,而且不少书籍的质量很高。可能是现在J

2、AVA已经比较成熟的原因吧。为了方便.net的爱好者学习设计模式,在此把我学习《JAVA与模式》这本书的学习笔记发出来,并用C#语言重新描述,希望能对初学者有所帮助。 其实设计模式也并不是什么高深的理论,个人认为并不是象一些人所说的“没写过10万代码就不要谈设计模式”,只要用心学习与实践是完全能够掌握的。简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色(如下图):工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直

3、接调用下创建产品对象,它往往由一个具体的类实现。 抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。 具体产品角色:工厂方法模式所创建的任何对 象都是这个角色的实例,由具体类实现。简单工厂模式优缺点: 模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。以园丁种植水果为例讨论该模式的具体实现: Fruit水果接口,

4、规定水果具有的一些共同特性 Apple苹果类派生自Fruit接口 Strawberry草莓类派生自Fruit接口 FruitGardener园丁类负责草莓与苹果的创建工作。 当Client要创建水果(苹果或草莓对象)的时候调用园丁类的factory方法创建:UML图如下:代码如下: Fruit.cs namespaceSimple_Factory { publicinterfaceFruit { //生长 voidgrow(); //收获 voidharvest(); //种植 voidplant(); } } Apple.cs na

5、mespaceSimple_Factory { publicclassApple:Fruit { publicApple() { } #regionFruit成员 publicvoidgrow() { Console.WriteLine("Appleisgrowing......."); } publicvoidharvest() { Console.WriteLine("Appleisharvesting......."); } publicvoidplant() { Console.WriteLine("Appleisplanti

6、ng......."); } #endregion } } Strawberry.cs namespaceSimple_Factory { publicclassStrawberry:Fruit { publicStrawberry() { } #regionFruit成员 publicvoidgrow() { Console.WriteLine("Strawberryisgrowing......."); } publicvoidharvest() { Console.WriteLine("Strawberryisharvestin

7、g......."); } publicvoidplant() { Console.WriteLine("Strawberryisplanting......."); } #endregion } } FruitGardener.cs namespaceSimple_Factory { publicclassFruitGardener { //静态工厂方法 publicstaticFruitfactory(stringwhich) { if(which.Equals("Apple")) { returnnewApple(); } el

8、seif(which.Equals("Strawberry")) { returnnewStrawberry(); } else { returnnull; } } } } Client.cs usingSystem; 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。