快速业务通道

Java语言简单工厂创立性模式介绍 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
一种呢?

请使用简单工厂模式设计一个创立不同几何形状,如圆形,方形和三角形实例的描图员(Art Tracer)系统。每个几何图形都要有画出draw()和擦去erase()两个方法。当描图员接到指令,要求创立不支持的几何图形时,要提出BadShapeException例外。

请简单举例说明描图员系统怎样使用。

在简单工厂模式的定义(见图4)中和花果园例子中,factory()方法都是属于实例的, 而非静态的或是类的方法。factory()方法可不可以是静态的方法呢?

问答题答案

对整个系统而言,工厂模式把具体使用new操作符的细节包装和隐藏起来。当然只要程序是用Java语言写的, Java语言的特征在细节里一定会出现的。

图3.(简单工厂模式定义的类图),是精减后的框架性类图,用于给出这一模式的准确而精练的定义。产品(Product)类到底会有几种,则要对每个系统作具体分析。

这里给出问题的完整答案。描图员(Art Tracer)系统的UML如下

Java语言简单工厂创立性模式介绍 - 编程入门网

系统的源代码如下

package com.javapatterns.simplefactory.exercise; public class ArtTracer {   public Shape factory(String which) throws BadShapeException   {    if (which.equalsIgnoreCase("circle"))    {     return new Circle();    }    else if (which.equalsIgnoreCase("square"))    {     return new Square();    }    else if (which.equalsIgnoreCase("triangle"))    {     return new Triangle();    }    else    {     throw new BadShapeException(which);    }   } }

代码清单8. ArtTracer类的源代码。

package com.javapatterns.simplefactory.exercise; public interface Shape {   void draw();   void erase(); }

Java语言简单工厂创立性模式介绍(6)

时间:2010-12-17

代码清单9. Shape接口的源代码。

package com.javapatterns.simplefactory.exercise;   public class Square implements Shape   {    public void draw()    {     System.out.println("Square.draw()");    }   public void erase()   {    System.out.println("Square.erase()");   } }

代码清单10. Square类的源代码。

package com.javapatterns.simplefactory.exercise; public class Circle implements Shape {   public void draw()   {    System.out.println("Circle.draw()");   }   public void erase()   {    System.out.println("Circle.erase()");   } }

代码清单11. Circle类的源代码。

package com.javapatterns.simplefactory.exercise; public class Triangle implements Shape {   public void draw()   {    System.out.println("Triangle.draw()");   }   public void erase()   {    System.out.println("Triangle.erase()");   } }

代码清单12. Triangle类的源代码。

package com.javapatterns.simplefactory.exercise; public class BadShapeException extends Exception {   public BadShapeException(String msg)   {    super(msg);   } }

代码清单13. BadShapeException类的源代码。

描图员(Art Tracer)系统使用方法如下

try { ArtTracer art = new ArtTracer(); art.factory("circle"); art.factory("square"); art.factory("triangle"); art.factory("diamond"); } catch(BadShapeException e) { ... }

注意对ArtTracer类提出菱形(diamond)请求时,会收到BadShapeException例外。

显然factory()可以是静态的或是类的方法。本文这样介绍简单工厂模式,是为了能

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号