欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    简单工厂Simple Factory模式.docx

    • 资源ID:6474453       资源大小:50.82KB        全文页数:15页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    简单工厂Simple Factory模式.docx

    1、简单工厂Simple Factory模式1.1简单工厂(Simple Factory)模式简单工厂模式是类的创建,又叫静态工厂方法(Static Factory Methord)模式。简单工厂模式是由一个工厂对象决定创造哪一种产品类的实例。1.1.1工厂模式的几种形态工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态的决定将哪一个类实例化,工厂模式有以下几种形态:简单工厂(Simple Factory)模式:又称静态工厂方法(Static Factory Methord)模式。工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic Factory)模式或

    2、虚拟构造子(Virtual Constructor)模式。抽象工厂(Abstract Factory)模式:又称工具箱(Kit或Toolkit)模式。下图所示的就是简单工厂模式的简略类图。简单工厂模式,或称静态工厂方法模式,是不同工厂方法模式的一个特殊实现。在Java语言中,通常的工厂方法模式不能通过设计功能的退化给出静态工厂方法模式。1.1.2简单工厂模式的引进(一般模式)比如有一个农场,生产各种水果,有苹果(Apple)、草莓(Strawberry)、葡萄(Grape);农场的园丁(FruitGardener)要根据客户的需求,提供相应的水果。下面看看是如何用简单工厂模式实现这个过程的,如

    3、下图:此模式的实现源码如下:1.1.2.1产品接口水果接口:Fruit.javapackage com.lavasoft.patterns.simplefactory.ybgc;/* Created by IntelliJ IDEA.* FileName:Fruit.java* User: LavaSoft* Date: 2006-12-1* Time: 0:26:51* Java与模式(-阎宏博士著)读书笔记* 工厂模式模式-简单工厂模式-一般模式* ReadMe: 抽象产品角色:工厂的水果产品接口-水果*/public interface Fruit /* * 种植 */ void pla

    4、nt(); /* * 生长 */ void grow(); /* * 收获 */ void harvest();1.1.2.2产品平果类:Apple.javapackage com.lavasoft.patterns.simplefactory.ybgc;/* Created by IntelliJ IDEA.* FileName:Apple.java* User: LavaSoft* Date: 2006-12-1* Time: 0:47:25* Java与模式(-阎宏博士著)读书笔记* 工厂模式模式-简单工厂模式-一般模式* ReadMe: 水果工厂的产品:苹果*/public class

    5、 Apple implements Fruit private int treeAge; /* * 种植 */ public void plant() System.out.println(Apple has been planted.); /* * 生长 */ public void grow() System.out.println(Apple is growing.); /* * 收获 */ public void harvest() System.out.println(Apple has been harvested.); /* * return 返回树龄 */ public int

    6、 getTreeAge() return treeAge; /* * 设置树龄 */ public void setTreeAge(int treeAge) this.treeAge = treeAge; 1.1.2.3产品草莓类:Strawberry.javapackage com.lavasoft.patterns.simplefactory.ybgc;/* Created by IntelliJ IDEA.* FileName:Strawberry.java* User: LavaSoft* Date: 2006-12-1* Time: 0:45:09* Java与模式(-阎宏博士著)读

    7、书笔记* 工厂模式模式-简单工厂模式-一般模式* ReadMe: 水果工厂的产品:草莓*/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(Straw

    8、berry has been planted.); /* * 辅助方法 */ public static void log(String msg) System.out.println(msg); 1.1.2.4产品葡萄类:Grape.javapackage com.lavasoft.patterns.simplefactory.ybgc;/* Created by IntelliJ IDEA.* FileName:Grape.java* User: LavaSoft* Date: 2006-12-1* Time: 0:36:56* Java与模式(-阎宏博士著)读书笔记* 工厂模式模式-简单

    9、工厂模式-一般模式* ReadMe: 水果工厂的产品:葡萄*/public class Grape implements Fruit private boolean seedless; /是否有籽 /* * 种植 */ public void plant() System.out.println(Grape has been planted.); /* * 生长 */ public void grow() System.out.println(Grape is growing.); /* * 收获 */ public void harvest() System.out.println(Grap

    10、e has been harvested.); /* * return 是否有籽 */ public boolean getSeedless() return seedless; /* * 有无籽的赋值方法 */ public void setSeedless(boolean seedless) this.seedless = seedless; /* * 辅助方法 */ public static void log(String msg) System.out.println(msg); 1.1.2.5工厂园丁类:FruitGardener.javapackage com.lavasoft.

    11、patterns.simplefactory.ybgc;/* Created by IntelliJ IDEA.* FileName:FruitGardener.java* User: LavaSoft* Date: 2006-12-1* Time: 1:03:27* Java与模式(-阎宏博士著)读书笔记* 工厂模式模式-简单工厂模式-一般模式* ReadMe: 工厂类角色: 水果园丁,生产水果产品*/public class FruitGardener /* * 静态工厂方法 * param which :具体的产品名称 * return 一个水果对象 * throws BadFruitE

    12、xception */ 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 fr

    13、uit request); 1.1.2.6工厂异常定义类:BadFruitException.javapackage com.lavasoft.patterns.simplefactory.ybgc;/* Created by IntelliJ IDEA.* FileName:BadFruitException.java* User: LavaSoft* Date: 2006-12-1* Time: 1:04:56* Java与模式(-阎宏博士著)读书笔记* 工厂模式模式-简单工厂模式-一般模式* ReadMe: 工厂的异常处理类*/public class BadFruitException

    14、 extends Exception public BadFruitException(String msg) super(msg); /调用父类的构造方法 1.1.2.7一般工厂模式的测试类package com.lavasoft.patterns.simplefactory.ybgc;/* Created by IntelliJ IDEA.* FileName:TestApp.java* User: LavaSoft* Date: 2006-12-1* Time: 1:12:08* Java与模式(-阎宏博士著)读书笔记* 工厂模式模式-简单工厂模式-一般模式* ReadMe: 一般工厂模

    15、式的测试类*/public class TestApp /* * 测试方法 */ private void test(String fruitName) try Fruit f = FruitGardener.factory(fruitName); System.out.println(恭喜!生产了一个水果对象: + fruitName); catch (BadFruitException e) System.out.println(对不起!工厂目前不能生产你所要的产品: + fruitName); System.out.println(e.getMessage(); /输出异常信息 e.pr

    16、intStackTrace(); /输出异常堆栈信息 /* * 应用入口方法 */ public static void main(String args) TestApp t = new TestApp(); t.test(apple); t.test(grape); t.test(strawberry); t.test(car); /此处会抛异常,水果工厂能生产car(轿车)吗!哈哈哈哈. 1.1.2.8测试运行结果恭喜!生产了一个水果对象:apple恭喜!生产了一个水果对象:grape恭喜!生产了一个水果对象:strawberry对不起!工厂目前不能生产你所要的产品:carBad fru

    17、it requestcom.lavasoft.patterns.simplefactory.ybgc.BadFruitException: Bad fruit requestat com.lavasoft.patterns.simplefactory.ybgc.FruitGardener.factory(FruitGardener.java:28)at com.lavasoft.patterns.simplefactory.ybgc.TestApp.test(TestApp.java:19)at com.lavasoft.patterns.simplefactory.ybgc.TestApp.

    18、main(TestApp.java:37)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:58

    19、5)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)Process finished with exit code 0从结果看来,有异常,是因为输入了工厂不能生产的类型car(小汽车),哈哈哈哈,果园能生产汽车吗?让幼儿园的小朋友告诉你吧!1.1.3简单工厂模式的一般性结构总结一下,从上面的简单工厂模式的实现可以看到,简单工厂模式需要实现工厂角色:园丁抽象产品:水果接口具体产品:苹果、葡萄、草莓另外还一般还需要实现工厂异常类客户类简单工厂模式的一般性结构图如下:1.1.4简单工厂模式的实现1.1.4.1

    20、使用接口或者抽象类实现多层次的产品结构工厂类可以有多个静态的工厂方法,分别用来生产不同的产品对象。1.1.4.2多个工厂方法分别负责创建不同的产品对象,比如java.text.DateFormat类是其子类的工厂类,而DateFormat类就是提供了多个静态工厂方法。1.1.4.3抽象产品角色的省略如果系统仅有一个具体产品角色产品角色的话,那么就可以省略掉抽象产品角色。省略掉抽象产品角色后的简略类图如下:下面是一个例子,工厂角色创建具体产品,源代码如下:1.1.4.3.1产品角色:ConcreteProduct.javapackage com.lavasoft.patterns.simplef

    21、actory.gchb;/* Created by IntelliJ IDEA.* FileName:ConcreteProduct.java* User: LavaSoft* Date: 2006-12-1* Time: 2:07:48* Java与模式(-阎宏博士著)读书笔记* 工厂模式-简单工厂模式-工抽合并(工厂角色与抽象产品角色合并)* ReadMe: 具体产品类,表示单一的一类产品.*/public class ConcreteProduct public ConcreteProduct() 1.1.4.3.2工厂角色:package com.lavasoft.patterns.s

    22、implefactory.gchb;/* Created by IntelliJ IDEA.* FileName:Creator.java* User: LavaSoft* Date: 2006-12-1* Time: 1:56:43* Java与模式(-阎宏博士著)读书笔记* 工厂模式-简单工厂模式-工抽合并(工厂角色与抽象产品角色合并)* ReadMe: 具体产品类,与抽象产品角色合并,只生产单一种类产品.*/public class Creator /* * 静态工厂方法 * return 一个产品 */ public static Creator factory() return ne

    23、w Creator(); 1.1.4.3.3测试类package com.lavasoft.patterns.simplefactory.gchb;/* Created by IntelliJ IDEA.* FileName:TestApp.java* User: LavaSoft* Date: 2006-12-1* Time: 2:11:30* Java与模式(-阎宏博士著)读书笔记* 工厂模式-简单工厂模式-工抽合并(工厂角色与抽象产品角色合并)* ReadMe: 工抽合并测试类*/public class TestApp private void test() Creator t = C

    24、reator.factory(); System.out.println(产品成功生产!); public static void main(String args) new TestApp().test(); 1.1.4.3.4测试结果产品成功生产!Process finished with exit code 01.1.4.4工厂角色与抽象角色合并在有些情况下,工厂角色可以由抽象产品角色扮演。典型的应用就是java.text.DateFormat类,一个抽象产品类同时是子类的工厂,如下图所示:下面是我自己写的一个实现,源代码如下:1.1.4.4.1抽象产品类(同时又是工厂类)package

    25、 com.lavasoft.patterns.simplefactory.cxsl;/* Created by IntelliJ IDEA.* FileName:AbsProduct.java* User: LavaSoft* Date: 2006-12-3* Time: 3:23:47* Java与模式(-阎宏博士著)读书笔记* 工厂模式-简单工厂模式-工厂角色与抽象产品角色合并* ReadMe: 抽象产品类,同时又是工厂类.*/public abstract class AbsProduct static Product factory() return new Product(); 1.1.4.4.2具体产品类package com.lavasoft.patterns.simplefactory.cxsl;/* Created by IntelliJ IDEA.* FileName:Product.java* User: LavaSoft* Date: 2006-12-3* Time: 3:23:54* Java与模式(-阎宏博士著)读书笔记* 工厂模式-简单工厂模式-工厂角色与抽象产品角色合并* ReadMe: 具体产品类*/public class Product Produ


    注意事项

    本文(简单工厂Simple Factory模式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开