在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();
}
}
阅读(3668) | 评论(1) | 转发(0) |