工厂模式学习报告

上传人:二*** 文档编号:246748224 上传时间:2024-10-15 格式:PPT 页数:27 大小:811KB
返回 下载 相关 举报
工厂模式学习报告_第1页
第1页 / 共27页
工厂模式学习报告_第2页
第2页 / 共27页
工厂模式学习报告_第3页
第3页 / 共27页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,“,设计模式”学习报告,移动互联子公司,胡凯,2003-08-07,概要:,模式概论,简单工厂模式,工厂模式,设计模式的实际应用,总结,相关资源,模式概论,什么是模式,为什么要用模式,设计模式的分类,什么是模式?,模式,其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式。,Alexander,给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。,模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。,因为每一个模式描述了一个在我们周围不断重复发生的问题,以及问题的解决方案的核心,它是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。,为什么要用模式?,设计模式的分类,GOF,的一书中提出了23种模式,而这23种模式又可划分为创建型模式,结构型模式,行为型模式.工厂模式则属于创建型模式.,工厂模式专门负责讲大量有共同接口的类实例化,工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态:,简单工厂(,Simple Factory),模式,工厂方法(,Factory Method),模式,抽象工厂(,Abstract Factory),模式,以下就这几个模式的结构和实例与大家分享一下(其他的我还不太懂._).相信当中有不正确地方,还望大家提出,指正.,简单工厂(,Simple Factory,),模式,简单工厂模式的引进,简单工厂模式的结构,简单工厂模式的实现,简单工厂模式的优缺点,简单工厂模式的引论,简单工厂模式,又称静态工厂方法模式(,Static Factory Method Pattern).,我们可以先来看一个实际生活中的例子:一个农场公司要向市场销售各类水果,有以下几类水果:葡萄,Grape,草莓,Strawberry,苹果,Apple.,考虑到它们的共性,我们一般是定义一个接口为水果(,Fruit),public 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:,类的实现,public 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 plant();,Class Grape:,public 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 grow();,void harvest();,void plant();,Class Strawberry:,public 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.,equalsIgnoreCase,(grape),return new Grape();,else,throw new,BadFruitException,(Bad fruit request);,Class,FruitGardener,:,简单工厂模式的结构,Fruit Gardener,factory(String which),工厂类(,Creator),角色,:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑.具体由一个,JAVA,类实现.,抽象产品(,Product),角色,:一般是所有公共产品的公共拥有的接口.可以是接口也可以是抽象类.,具体产品(,Concrete Product),角色,:工厂模式所创建的任何对象都是这个角色.具体由一个,JAVA,类实现.,Applet,等,fruit,简单工厂模式的实现,多层次的产品结构,使用,JAVA,接口或,JAVA,抽象类,多个工厂方法(可以有多个工厂方法),抽象产品角色的省略,工厂角色与抽象产品角色合并,三个角色的合并,简单工厂模式的优点和缺点,优点:,客户端可以免除直接创建产品对象的责任,而仅仅负责“消费”产品,实现了对责任的分割.,缺点:,这个工厂类里集中了所有的产品创建逻辑,当要增加产品时都需更改工厂类,静态方法无法由子类继承,工厂角色无法形成等级结构,一个简单工厂模式的实例,工厂方法(,Factory Method),模式,工厂方法模式的引进,工厂方法模式的结构和角色,工厂方法模式的实现,简单模式和工厂方法模式,工厂方法模式的引进,回顾前面讨论的简单工厂模式的缺点:当有新的产品加入到系统中之后,就需要更改工厂类,将必要的逻辑加入到工厂类中,而这就有背与“开闭的原则.,扩展工厂类等级结构,简单工厂模式,工厂方法模式,“开闭”原则要求一个系统在无需修改的情况下扩展其功能,工厂方法模式的结构和角色,抽象工厂(,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 ConcreteCreator2();,prod2=,creator2.factory(),;,public 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();,工厂类,public interface,Product,public class ConcreteProduct1 implements,Product,public ConcreteProduct1(),System.out.,println,(CocnreteProduct1 is,being created.);,public class ConcreteProduct2 implements,Product,public ConcreteProduct2(),System.out.,println,(CocnreteProduct2 is,being created.);,产品类,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 ConcreteCreator2();,prod2=,creator2.factory(),;,活动序列图,客户端创建一个,ConcreteCreator1,对象,然后调用,ConcreteProduct1,的构造函数创建出产品对象.,creator1=new ConcreteCreator1(),;,prod1=,creator1.factory(),;,简单工厂模式和工厂方法模式,不同之处,:工厂模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上,表现在当要加入一个新的产品的时候,并不需要更改工厂类,而只需要扩展抽象工厂类.实现了工厂等级结构,符合“开闭”原则的要求.,相同之处,:,Factory(),方法返回的数据类型是一个抽象类型,而不是一种具体产品类型,而客户端也不必知道所得到的真实类型,设计模式的实际应用,ConnectionFactory,(,abstract,),MEIPDataSourceConnection,(,class,),MEIPDriverConnection,(,class,),static,newInstance,(),所在包:,com.,creawor,.,meip,.db,public interface,Creator,public,abstract,Connection,getConnection,();,ConnectionFactory,static,newInstance,(),单实例模式,singleton,抽象工厂和抽象产品和为一个抽象类,继承,getConnection,(),方法得到具体类型的,Connection,具体产品,FormatFactory,(,abstract,),ExcelFormat,(,class,),ContentFormat,(,class,),static,newInstance,(),所在包:,com.,creawor,.,meip,.format,public interface,Creator,public,abstract,int,parse()();,ConnectionFactory,static,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!