工厂模式JAVAppt课件_第1页
工厂模式JAVAppt课件_第2页
工厂模式JAVAppt课件_第3页
工厂模式JAVAppt课件_第4页
工厂模式JAVAppt课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、JAVA工厂方式工厂方式专门担任将大量有共同接口的类实例化。工厂方式可以动态决议将哪一个类实例化,不用事先知道每次要实例化哪一个类。工厂方式的几种形状1简单工厂Simple Factory方式,又称静态工厂方法方式Static Factory MethodPattern。2工厂方法Factory Method方式,又称多态性工厂Polymorphic Factory方式或虚拟构造子Virtual Constructor方式;3笼统工厂Abstract Factory方式,又称工具箱Kit 或Toolkit方式。简单工厂实例比如说有一个农场公司,专门向市场销售各类水果。在这个系统里需求描画以下的

2、水果:葡萄 Grape草莓 Strawberry苹果 Apple水果与其他的植物有很大的不同,就是水果最终是可以采摘食用的。那么一个自然的作法就是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开。代码清单1:接口Fruit 的源代码public interface Fruit/* 生长*/void grow();/* 收获*/void harvest();/* 种植*/void plant();代码清单2:类Apple 的源代码public class Apple implements Fruitprivate int treeAge;public void grow()log(Ap

3、ple is growing.);public void harvest()log(Apple has been harvested.);public void plant()log(Apple has been planted.);public static void log(String msg)System.out.println(msg);public int getTreeAge()return treeAge;public void setTreeAge(int treeAge)this.treeAge = treeAge;代码清单3:类Grape 的源代码public class

4、 Grape implements Fruitprivate boolean seedless;public void grow()log(Grape is growing.);public void harvest()log(Grape has been harvested.);public void plant()log(Grape has been planted.);public static void log(String msg)System.out.println(msg);public boolean getSeedless()return seedless;public vo

5、id setSeedless(boolean seedless)this.seedless = seedless;类Strawberry 的源代码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

6、 has been planted.); FruitGardener 类的源代码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) retu

7、rn new Grape(); else throw new BadFruitException(Bad fruit request); 简单工厂方式的构造工厂类Creator角色:担任这个角色的是工厂方法方式的中心,含有与运用严密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个详细Java 类实现。笼统产品Product角色:担任这个角色的类是工厂方法方式所创建的对象的父类,或它们共同拥有的接口。笼统产品角色可以用一个Java 接口或者Java 笼统类实现。详细产品Concrete Product角色:工厂方法方式所创建的任何对象都是这个角色的实例,详细产品角色由一个详细

8、Java 类实现。Creator 类的源代码public class Creator public static Product factory() return new ConcreteProduct(); 笼统角色Product 接口的源代码public interface Product详细产品角色ConcreteProduct 类的源代码public class ConcreteProduct implements Productpublic ConcreteProduct()多层次的产品构造简单方式的优缺陷优点:方式的中心是工厂类。这个类含有必要的判别逻辑,可以决议在什么时候创建哪一

9、个产品类的实例。而客户端那么可以免除直接创建产品对象的责任,而仅仅担任“消费产品。简单工厂方式经过这种做法实现了对责任的分割。缺陷一: 当产品类有复杂的多层次等级构造时,工厂类只需它本人。以不变应万变,就是方式的缺陷。 这个工厂类集中了一切的产品创建逻辑,构成一个无所不知的全能类,有人把这种类叫做上帝类God Class。假设这个全能类代表的是农场的一个详细园丁的话,那么这个园丁就需求对一切的产品担任,成了农场的关键人物,他什么时候不能正常任务了,整个农场都要遭到影响。缺陷二: 当产品类有不同的接口种类时,工厂类需求判别在什么时候创建某种产品。这种对时机的判别和对哪一种详细产品的判别逻辑混合在

10、一同,使得系统在未来进展功能扩展时较为困难。缺陷三: 由于简单工厂方式运用静态方法作为工厂方法,而静态方法无法由子类承继,因此,工厂角色无法构成基于承继的等级构造。“开闭原那么“开闭原那么要求一个系统的设计可以允许系统在无需修正的情况下,扩展其功能。简单工厂角色只在有限的程度上支持“开闭原那么。工厂方法方式工厂方法方式的意图是定义一个创建产品对象的工厂接口,将实践创建任务推迟到子类中。首先,在工厂方法方式中,中心的工厂类不再担任一切的产品的创建,而是将详细创建的任务交给子类去做。这个中心类那么摇身一变,成为了一个笼统工厂角色,仅担任给出详细工厂子类必需实现的接口,而不接触哪一个产品类该当被实例

11、化这种细节。工厂方法方式的构造工厂方法方式的系统涉及到的角色笼统工厂Creator角色:担任这个角色的是工厂方法方式的中心,它是与运用程序无关的。任何在方式中创建对象的工厂类必需实现这个接口。在上面的系统中这个角色由Java 接口Creator 扮演;在实践的系统中,这个角色也经常运用笼统Java 类实现。详细工厂Concrete Creator角色:担任这个角色的是实现了笼统工厂接口的详细Java 类。详细工厂角色含有与运用亲密相关的逻辑,并且遭到运用程序的调用以创建产品对象。在本系统中给出了两个这样的角色,也就是详细Java 类ConcreteCreator1 和ConcreteCreat

12、or2。工厂方法方式的系统涉及到的角色笼统产品Product角色:工厂方法方式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在本系统中,这个角色由Java 接口Product 扮演;在实践的系统中,这个角色也经常运用笼统Java 类实现。详细产品Concrete Product角色:这个角色实现了笼统产品角色所声明的接口。工厂方法方式所创建的每一个对象都是某个详细产品角色的实例。实例农场工厂方法方式和简单工厂方式工厂方法方式的中心是一个笼统工厂类,而简单工厂方式把中心放在一个详细类上。工厂方法方式可以允许很多详细工厂类从笼统工厂类中将创建行为承继下来,从而可以成为多个简单工厂

13、方式的综合,进而推行了简单工厂方式。工厂方法方式和简单工厂方式与简单工厂方式中的情形一样的是,ConcreteCreator 的factory() 方法返还的数据类型是一个笼统类型Product,而不是哪一个详细产品类型,而客户端也不用知道所得到的产品的真实类型。这种多态性设计将工厂类选择创建哪一个产品对象、如何创建这个对象的细节完全封装在详细工厂类内部。对于添加新的产品类而言,这个系统完全支持“开-闭原那么。笼统工厂方式笼统工厂方式与工厂方法方式的区别笼统工厂方式与工厂方法方式的最大区别就在于,工厂方法方式针对的是一个产品等级构造;而笼统工厂方式那么需求面对多个产品等级构造。笼统工厂方式的构

14、造笼统工厂方式GOF95是对象的创建方式,它是工厂方法方式的进一步推行。假设一个子系统需求一些产品对象,而这些产品又属于一个以上的产品等级构造。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进笼统工厂方式。这样的话,消费产品的一方不需求直接参与产品的创建任务,而只需求向一个公用的工厂接口恳求所需求的产品。下面就以一个表示性的系统为例,阐明这个方式的构造。产品构造A和B系统类图笼统工厂方式涉及到的角色笼统工厂AbstractFactory角色:担任这个角色的是工厂方法方式的中心,它是与运用系统的商业逻辑无关的。通常运用Java 接口或者笼统Java 类实现,而一切的详细

15、工厂类必需实现这个Java 接口或承继这个笼统Java 类。详细工厂类Conrete Factory角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择适宜的产品对象的逻辑,而这个逻辑是与运用系统的商业逻辑严密相关的。通常运用详细Java 类实现这个角色。笼统工厂方式涉及到的角色笼统产品Abstract Product角色:担任这个角色的类是工厂方法方式所创建的对象的父类,或它们共同拥有的接口。通常运用Java 接口或者笼统Java 类实现这一角色。详细产品Concrete Product角色:笼统工厂方式所创建的任何产品对象都是某一个详细产品类的实例。这是客户端最终需求的东西,其内部一定充溢了运用系统的商业逻辑。通常运用详细Java 类实现这个角色。普通而言,有多少个产品等级构造,就会在工厂角色中发现多少个工厂方法。每一个产品等级构造中有多少详细产品,就有多少个产品族,也就会在工厂等级构造中发现多少个详细工

温馨提示

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

评论

0/150

提交评论