




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计模式学习之简单工厂(simple facotry)、工厂方法(actory method)、抽象工厂(abstract factory) 一.简单工厂(Simple Factory)GOF没有把简单工厂作为设计模式之一列出。但是为了学习后面的两种工厂模式,还是先来了解一下简单工厂。作用:专门由一个类来决定实例化哪个产品类实现要点:可能很多人平时都不知不觉地使用了简单工厂。简单工厂就是把决定实例化哪个类的方法放到一个单独的类(所谓的工厂类)里。UML:代码: abstract class Product public abstract void showProduct(); class ProductA : Product public override void showProduct() Console.WriteLine(this is productA); class ProductB : Product public override void showProduct() Console.WriteLine(this is productB); /factory class Factory public Product getProduct(int type) if (type = 0) return new ProductA(); else return new ProductB(); /-执行-class Program static void Main(string args) Factory f = new Factory(); Product p1 = f.getProduct(0); Product p2 = f.getProduct(1); p1.showProduct(); p2.showProduct(); Console.ReadLine(); 二.工厂方法(Factory Method)作用:工厂方法是简单工厂的“再抽象”,不在某个类里直接决定实例化哪个产品类,而是把这个决定延迟到它的子类里面。(至于为什么要抽象出父类,参见之前的文章“父类引用指向子类对象”)。实现要点:抽象工厂类,由其子类决定实例化哪个产品类。UML:代码:abstract class Product public abstract void showProduct(); class ProductA : Product public override void showProduct() Console.WriteLine(this is productA); class ProductB : Product public override void showProduct() Console.WriteLine(this is productB); /factory abstract class Factory public abstract Product getProduct(); class FacotryA : Factory public override Product getProduct() return new ProductA(); class FacotryB : Factory public override Product getProduct() return new ProductB(); /-执行- class Program static void Main(string args) Factory f = new Factory2; f0 = new FacotryA(); f1 = new FacotryB(); foreach (Factory myfactory in f) Product p = myfactory.getProduct(); p.showProduct(); Console.ReadLine(); 三.抽象工厂(Abstract Factory)作用:客户类需要不同的产品组合来满足自己的需求,客户只关心“产品组合”的效果,而不想关心具体的产品细节。实现要点:由抽象工厂类(本例中的Home类)的子类来决定选择哪些具体产品组(选bed,sofa,door,desk等);使用这个工厂时,客户类(Client类)先声明一个抽象工厂的类,比如本例中Client类的构造函数里需要一个Home类型的参数,调用者在实例化客户类(main函数中的client1和client2)时,参数直接传入具体的工厂类(本例的SimpleHome或者AdvancedHome)即可,这样调用者不需要知道具体的产品类有哪些(本例中的bed,sofa,door,desk等),就能通过选择工厂类型(本例中的SimpleHome或者AdvancedHome)来获得一系列的产品类型(bed,sofa,door,desk等)。UML:代码:abstract class Products public abstract void showProduct(); class ProductBed : Products public override void showProduct() Console.WriteLine(exist a Bed); class ProductDesk : Products public override void showProduct() Console.WriteLine(exist a Desk); class ProductDoor : Products public override void showProduct() Console.WriteLine(exist a Door); class ProductSofa : Products public override void showProduct() Console.WriteLine(exist a Sofa); /abstractfactory,这里是一个抽象的“家” abstract class Home protected Products myBed,myDesk,myDoor,mySofa; public abstract void showMyHouse(); /简单的家:只需要门和床 class SimpleHome : Home public SimpleHome() myBed = new ProductBed(); myDoor = new ProductDoor(); public override void showMyHouse() Console.WriteLine(this is a simple Home:); myBed.showProduct(); myDoor.showProduct(); /高级一点的家:还有沙发,桌子等家具 class AdvancedHome : Home public AdvancedHome() myBed = new ProductBed(); myDoor = new ProductDoor(); mySofa = new ProductSofa(); myDesk = new ProductDesk(); public override void showMyHouse() Console.WriteLine(this is a advanced Home:); myBed.showProduct(); myDoor.showProduct(); mySofa.showProduct(); myDesk.showProduct(); /调用抽象工厂的客户类 class Client Home myHome; public Client(Home newHome) this.myHome = newHome; public void showHome() myHome.showMyHouse(); /-执行-class Program static void Main(string args) /客户不需要选择具体家具了,只需要选择具体的房子类型就可以了,家具自动配好。 Client client1 = new Client(new SimpleHome(); client1.showHome(); Client client2 = new Client(new AdvancedHome(); client2.showHome(); Console.ReadLine(); 总是有人出来追究抽象工厂和工厂方法的区别,它们本来目的就不同,所以不好比: 工厂方法其实应该是一种思想,我要用一个东西,但是现在又没法确定它怎么办,留下一个接口,由其它对象以后实现。这样就可以把易变的、不确定的部分分离出来,也就
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 固原市原州区精神残疾人及亲友协会对外公开招聘中~笔试备考题库及答案解析
- 2026福建海峡银行管培生(优青生)校园招聘笔试备考试题及答案解析
- 2025年塔城市消防救援大队招聘政府专职消防员(15人)笔试模拟试题及答案解析
- 2025广东江门开平市苍城镇行政执法辅助人员招聘1人笔试参考题库附答案解析
- 2025年及未来5年中国硅基薄膜太阳能电池行业市场调查研究及发展战略规划报告
- 2025年及未来5年中国银葱清洁布行业发展监测及投资战略研究报告
- 2025年及未来5年中国鞣酸行业市场深度研究及投资战略规划报告
- 2025年及未来5年中国颈椎保健枕行业发展监测及投资战略研究报告
- 2025四川光明投资集团有限公司公开招聘办公室文员见习生笔试题库历年考点版附带答案详解
- 2025年及未来5年中国发动机连杆行业市场发展数据监测及投资战略规划报告
- 【《企业人才招聘存在的问题与对策》5200字(论文)】
- 我国养老状况课件
- 心脏支架术后康复课件
- 国庆期间保安安全培训课件
- 监控设备迁移合同协议书
- GB/T 25775-2010焊接材料供货技术条件产品类型、尺寸、公差和标志
- GB/T 14454.2-2008香料香气评定法
- 《干部履历表》(1999版电子版)
- ISO 9001:2015新版质量管理体系详解与案例文件汇编
- 数据中心基础知识培训
- 航天电子电气产品手工焊接工艺设计技术要求
评论
0/150
提交评论