Java私有构造函数的应用

2012-11-12

  在Java中,构造函数的访问级别通常是public, 它提供了一个构造该类对象的接口。可是你知不知道,把构造函数的级别设为private, 有一些特别用处。

  先来看一段代码:

  //Shape.java

  public class Shape {

  private Shape() {

  /* set something here */

  }

  public static Shape makeShape(/* arglist */) {

  System.out.println("here is the shape you ordered");

  return (new Shape());

  }

  public static void main(String args[]) {

  Shape.makeShape();

  }

  }

  首先从语言角度分析,我们可以知道, 任何类的使用者都无法使用构造函数来生成一个图形, 因为构造函数是私有的,无法被类以外的函数使用。而只能通过调用makeShape来实现。

  也许你会问,为什么不直接使用构造函数来生成图形,而需要使用一个看上去多余的makeShape方法呢?

  这样做有以下几个好处:

  1。你可以返回任何的Shape类型,包括Shape的子类。比如你可以把makeShape写成这样:

  public static Shape makeShape(/* arglist */) {

  System.out.println("here is the shape you ordered");

  if (retangle)

  return (new Retangle(/* arglist*/));

  if (Circle)

  return (new Circle(/* arglist */));

  /* you can return as many shapes as you like */

  }

  这里假设Retangle 和 Circle 都是shape的子类,并且和Shape类在同一个包?,Shape类可以访问子类的构造函数。这样shape就提供了一个图形工厂。 用户通过一个接口就可以生成不同的图形。事实上,这种用法被称为“工厂模式”。

  2。可以实现一个类只有一个对象。请看下面的代码

  //Handler.java

  public class Handler {

  private Handler handler = null;

  private Handler() {

  /* set something here */

  }

  public static getHandler(/* arglist */) {

  if (!handler)

  handler = new Handler();

  }

  }

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com