Board logo

标题: Java私有构造函数的应用 [打印本页]

作者: qingqing3721    时间: 2012-5-10 13:59     标题: Java私有构造函数的应用

在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();
  }
  }
  首先从语言角度剖析,我们可以知道, 任何类的使用者都无法使用构造函数来生成一个图形, 由于构造函数是公有的,无法被类以外的函数使用。pangoo电视机而只能通过调用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();
  }




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0