工厂模式学习报告PPT文档资料_第1页
工厂模式学习报告PPT文档资料_第2页
工厂模式学习报告PPT文档资料_第3页
工厂模式学习报告PPT文档资料_第4页
工厂模式学习报告PPT文档资料_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.1“设计模式设计模式”学习报告学习报告移动互联子公司移动互联子公司胡凯2003-08-07.2概要概要:模式概论简单工厂模式工厂模式设计模式的实际应用总结相关资源.3模式概论什么是模式为什么要用模式设计模式的分类.4什么是模式 ? 模式,其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。.5因为每一个模式

2、描述了一个在我们周围不断重复发生的问题,以及问题的解决方案的核心,它是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。为什么要用模式?.6 设计模式的分类gof的一书中提出了23种模式,而这23种模式又可划分为创建型模式,结构型模式,行为型模式.工厂模式则属于创建型模式.工厂模式专门负责讲大量有共同接口的类实例化,工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态:简单工厂(simple factory)模式工厂方法(factory method)模式抽象工厂(abst

3、ract factory)模式以下就这几个模式的结构和实例与大家分享一下(其他的我还不太懂._).相信当中有不正确地方,还望大家提出,指正.7简单工厂 (simple factory)模式简单工厂模式的引进简单工厂模式的结构简单工厂模式的实现简单工厂模式的优缺点.8简单工厂模式的引论简单工厂模式,又称静态工厂方法模式(static factory method pattern).我们可以先来看一个实际生活中的例子:一个农场公司要向市场销售各类水果,有以下几类水果:葡萄grape,草莓strawberry,苹果apple.考虑到它们的共性,我们一般是定义一个接口为水果(fruit).9publi

4、c class apple implements fruit public void grow() system.out.println(apple is growing.); public void harvest() system.out.println(apple has been harvested.); public void plant() system.out.println(apple has been planted.); public interface fruit void grow(); void harvest(); void plant();class apple:

5、类的实现类的实现.10public class grape implements fruit public void grow() system.out.println(“grape is growing.); public void harvest() system.out.println(“grape has been harvested.); public void plant() system.out.println(“grape has been planted.); public interface fruit void grow(); void harvest(); void p

6、lant();class grape:.11public class strawberry implements fruit public void grow() system.out.println( strawberry is growing.); public void harvest() system.out.println( strawberry has been harvested.); public void plant() system.out.println( strawberry has been planted.); public interface fruit void

7、 grow(); void harvest(); void plant();class strawberry:.12public class fruitgardener public static fruit factory(string which) throws badfruitexception if (which.equalsignorecase(apple) return new apple(); else if (which.equalsignorecase(strawberry) return new strawberry(); else if (which.equalsigno

8、recase(grape) return new grape(); else throw new badfruitexception(bad fruit request); class fruitgardener:.13简单工厂模式的结构fruit gardenerfactory(string which)工厂类工厂类(creator)角色角色:担任这个担任这个角色的是工厂方法模式的核心角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻含有与应用紧密相关的商业逻辑辑.具体由一个具体由一个java类实现类实现.抽象产品抽象产品(product)角色角色:一般一般是所有公共产品的公共拥有的是所

9、有公共产品的公共拥有的接口接口.可以是接口也可以是抽象可以是接口也可以是抽象类类.具体产品具体产品(concrete product)角色角色:工厂模式所创建的任何对工厂模式所创建的任何对象都是这个角色象都是这个角色.具体由一个具体由一个java类实现类实现.applet等等fruit.14简单工厂模式的实现简单工厂模式的实现多层次的产品结构使用java接口或java抽象类多个工厂方法(可以有多个工厂方法)抽象产品角色的省略工厂角色与抽象产品角色合并三个角色的合并.15简单工厂模式的优点和缺点优点:客户端可以免除直接创建产品对象的责任,而仅仅负责“消费”产品,实现了对责任的分割.缺点:这个工厂

10、类里集中了所有的产品创建逻辑,当要增加产品时都需更改工厂类静态方法无法由子类继承,工厂角色无法形成等级结构.16一个简单工厂模式的实例.17工厂方法 (factory method)模式工厂方法模式的引进工厂方法模式的结构和角色工厂方法模式的实现简单模式和工厂方法模式.18工厂方法模式的引进工厂方法模式的引进回顾前面讨论的简单工厂模式的缺点:当有新的产品加入到系统中之后,就需要更改工厂类,将必要的逻辑加入到工厂类中,而这就有背与“开闭的原则.扩展工厂类等级结构简单工厂模式工厂方法模式“开闭”原则要求一个系统在无需修改的情况下扩展其功能.19工厂方法模式的结构和角色工厂方法模式的结构和角色抽象工

11、厂(creator)角色具体工厂(concrete creator)角色抽象产品(product)角色具体产品(concrete product)角色public class client private static creator creator1, creator2; private static product prod1, prod2; public static void main(string args) creator1 = new concretecreator1(); prod1 = creator1.factory();creator2 = new concretecre

12、ator2(); prod2 = creator2.factory(); .20public interface creator public product factory();public class concretecreator1 implements creator public product factory() return new concreteproduct1(); public class concretecreator2 implements creator public product factory() return new concreteproduct2();

13、工厂类工厂类public interface productpublic class concreteproduct1 implements productpublic concreteproduct1() system.out.println(cocnreteproduct1 is being created.); public class concreteproduct2 implements productpublic concreteproduct2() system.out.println(cocnreteproduct2 is being created.); 产品类产品类publ

14、ic class client private static creator creator1, creator2; private static product prod1, prod2; public static void main(string args) creator1 = new concretecreator1(); prod1 = creator1.factory();creator2 = new concretecreator2(); prod2 = creator2.factory(); .21活动序列图活动序列图客户端创建一个concretecreator1对象,然后调

15、用concreteproduct1的构造函数创建出产品对象.creator1 = new concretecreator1(); prod1 = creator1.factory();.22简单工厂模式和工厂方法模式简单工厂模式和工厂方法模式 不同之处不同之处:工厂模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上,表现在当要加入一个新的产品的时候,并不需要更改工厂类,而只需要扩展抽象工厂类.实现了工厂等级结构,符合“开闭” 原则的要求.相同之处相同之处:factory()方法返回的数据类型是一个抽象类型,而不是一种具体产品类型,而客户端也不必知道所得到的真实类型.23设计模式的

16、实际应用connectionfactory (abstract)meipdatasourceconnection(class)meipdriverconnection(class) static newinstance()所在包:com.creawor.meip.dbpublic interface creator public abstract connection getconnection(); connectionfactory static newinstance()单实例模式singleton抽象工厂和抽象产品和为一个抽象类继承getconnection()方法得到具体类型的connection具体产品.24formatfactory(abstract)excelformat(class)contentformat(class) static newinstance()所在包:com.creawor.meip. formatpublic interface creator public abstract int parse()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论