欢迎来到天天文库
浏览记录
ID:6053081
大小:150.65 KB
页数:9页
时间:2018-01-01
《设计模式-简单工厂(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
此文档下载收益归作者所有