简单工厂模式_第1页
简单工厂模式_第2页
简单工厂模式_第3页
简单工厂模式_第4页
简单工厂模式_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、Java创建对象的方法,所有面向对象的语言都有固定的创立对象的办法。java的办法就是使用new操作符。比如StringBuffer s = new StringBuffer(1000); 使用new操作符的短处是事先必须明确知道要实例化的类是什么 实例化的责任往往与使用实例的责任不加区分。,创立性模式,面向对象的设计的目的之一,就是把责任进行划分,以分派给不同的对象。 创立性模式把对象的创立过程封装起来,使得创立实例的责任与使用实例的责任分割开 由专门的模块分管实例的创立,而系统在宏观上不再依赖于对象创立过程的细节,创立性模式,创立性模式将类实例化,不必事先知道每次是要实例化哪一个类 把实例

2、化的责任与使用实例的责任分割开来,工厂模式,工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。 工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式抽象工厂(Abstract Factory)模式,简单工厂(Simple Factory)模式,比如说,你有一个描述你的后花园的系统,在你的后花园里有各种的花,但还没有水果。你现在要往你的系统里引进一些新的类,用来描述下列的水果: 葡萄 Grapes 草莓 Strawberry 萍果 Apple,简单工厂(Simple Factory)模式,

3、源代码,源代码,源代码,源代码,简单工厂(Simple Factory)模式,作为小花果园的主人兼园丁,也是系统的一部分,自然要由一个合适的类来代表,这个类就是 FruitGardener类。,源代码,园丁的工作(简单工厂),FruitGardener类会根据要求,创立出不同的水果类,比如萍果Apple,葡萄Grape或草莓Strawberry的实例。 这里的园丁就如同一个可以创建水果产品的工厂一样 如果接到不合法的要求,FruitGardener类会给出例外BadFruitException。,源代码,丰收的果园(客户端),在使用时,只须呼叫FruitGardener的factory()方法

4、即可 try FruitGardener gardener = new FruitGardener();FruitIF grape = gardener.factory(grape);FruitIF apple = gardener.factory(apple);FruitIF strawberry = gardener.factory(strawberry);.catch(BadFruitException e) .,小结:简单工厂模式的定义,总而言之,简单工厂模式就是由一个工厂类根据参数来决定创立出那一种产品类的实例。,小结:简单工厂模式框架的源代码,public class Creato

5、r public Product factory() return new ConcreteProduct(); public interface Product public class ConcreteProduct implements Product public ConcreteProduct() ,源代码:FruitIF接口,接口FruitIF的源代码。这个接口确定了水果类必备的方法: 种植plant(),生长grow(), 以及收获harvest()。 package com.javapatterns.simplefactory;public interface FruitIF

6、void grow();void harvest();void plant();String color = null;String name = null;,返回,源代码:Apple类,萍果是多年生木本植物,因此具备树龄treeAge性质 package com.javapatterns.simplefactory;public class Apple implements FruitIF public void grow() log(Apple is growing.);public void harvest() log(Apple has been harvested.);public

7、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; private int treeAge;,返回,源代码:Grape类,葡萄分为有籽与无籽两种,因此具有seedful性质 package com.javapatterns.simplefactory

8、;public class Grape implements FruitIF 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 getSeedful() return seedful;public void set

9、Seedful(boolean seedful) this.seedful = seedful;private boolean seedful;,返回,源代码:Strawberry类,package com.javapatterns.simplefactory;public class Strawberry implements FruitIF public void grow() log(Strawberry is growing.);public void harvest() log(Strawberry has been harvested.);public void plant() l

10、og(Strawberry has been planted.);public static void log(String msg) System.out.println(msg);,返回,源代码:FruitGardener类,package com.javapatterns.simplefactory;public class FruitGardener public FruitIF factory(String which) throws BadFruitExceptionif (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);

温馨提示

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

评论

0/150

提交评论