设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)

设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)

ID:6053081

大小:150.65 KB

页数:9页

时间:2018-01-01

设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)_第1页
设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)_第2页
设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)_第3页
设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)_第4页
设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)_第5页
资源描述:

《设计模式-简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、设计模式学习之简单工厂(simplefacotry)、工厂方法(actorymethod)、抽象工厂(abstractfactory)一.简单工厂(SimpleFactory)GOF没有把简单工厂作为设计模式之一列出。但是为了学习后面的两种工厂模式,还是先来了解一下简单工厂。作用:专门由一个类来决定实例化哪个产品类实现要点:可能很多人平时都不知不觉地使用了简单工厂。简单工厂就是把决定实例化哪个类的方法放到一个单独的类(所谓的工厂类)里。UML:代码:abstractclassProduct{publicabstract

2、voidshowProduct();}classProductA:Product{publicoverridevoidshowProduct(){Console.WriteLine("thisisproductA");}}classProductB:Product{publicoverridevoidshowProduct(){Console.WriteLine("thisisproductB");}}//factoryclassFactory{publicProductgetProduct(inttype){if(t

3、ype==0){returnnewProductA();}else{returnnewProductB();}}}//---------------执行-----------------classProgram{staticvoidMain(string[]args){Factoryf=newFactory();Productp1=f.getProduct(0);Productp2=f.getProduct(1);p1.showProduct();p2.showProduct();Console.ReadLine();

4、}} 二.工厂方法(FactoryMethod)作用:工厂方法是简单工厂的“再抽象”,不在某个类里直接决定实例化哪个产品类,而是把这个决定延迟到它的子类里面。(至于为什么要抽象出父类,参见之前的文章“父类引用指向子类对象”)。实现要点:抽象工厂类,由其子类决定实例化哪个产品类。UML:代码:abstractclassProduct{publicabstractvoidshowProduct();}classProductA:Product{publicoverridevoidshowProduct(){Console.

5、WriteLine("thisisproductA");}}classProductB:Product{publicoverridevoidshowProduct(){Console.WriteLine("thisisproductB");}}//factoryabstractclassFactory{publicabstractProductgetProduct();}classFacotryA:Factory{publicoverrideProductgetProduct(){returnnewProductA()

6、;}}classFacotryB:Factory{publicoverrideProductgetProduct(){returnnewProductB();}}//--------------------执行------------------------classProgram{staticvoidMain(string[]args){Factory[]f=newFactory[2];f[0]=newFacotryA();f[1]=newFacotryB();foreach(Factorymyfactoryinf)

7、{Productp=myfactory.getProduct();p.showProduct();}Console.ReadLine();}} 三.抽象工厂(AbstractFactory)作用:客户类需要不同的产品组合来满足自己的需求,客户只关心“产品组合”的效果,而不想关心具体的产品细节。实现要点:由抽象工厂类(本例中的Home类)的子类来决定选择哪些具体产品组(选bed,sofa,door,desk等);使用这个工厂时,客户类(Client类)先声明一个抽象工厂的类,比如本例中Client类的构造函数里需要一个H

8、ome类型的参数,调用者在实例化客户类(main函数中的client1和client2)时,参数直接传入具体的工厂类(本例的SimpleHome或者AdvancedHome)即可,这样调用者不需要知道具体的产品类有哪些(本例中的bed,sofa,door,desk等),就能通过选择工厂类型(本例中的SimpleHome或者Adva

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

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

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