首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

天极网 > 开发频道>爪哇语言简单工厂创立性模式介绍

爪哇语言简单工厂创立性模式介绍

2001-11-14 11:46作者:阎宏出处:yesky责任编辑:方舟


  问答题

  在本节开始时不是说,工厂模式就是在不使用new操作符的情况下,将......类实例化的吗, 可为什么在具体实现时,仍然使用了new操作符呢?

  在本节的小果园系统里有三种水果类,可为什么在图3.(简单工厂模式定义的类图) 中产品(Product)类只有一种呢?

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

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

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

  问答题答案

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

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

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


              系统的源代码如下

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();
}

  代码清单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()可以是静态的或是类的方法。本文这样介绍简单工厂模式,是为了能方便与后面介绍的工厂方法模式作一比较。


共8页。 9 7 1 2 3 4 5 6 7 8

关注此文的读者还看过:

返回开发频道首页

共8页。 上一页12345678

软件频道最新更新

热点推荐

天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络