public class Demo08 {
public static void main(String args[]) {
// 要求:实例化Demo对象,同时调用print方法
Demo d = null;
d = new Demo(); // d 出错了
d.print();
}
}
class Demo {
// 构造方法被私有化了
private Demo() {
}
public void print() {
System.out.println("Hello World!!!");
}
}
此时,无法实例化对象,无法实例化对象就无法调用print方法。
public class Demo08 {
public static void main(String args[]) {
// 要求:实例化Demo对象,同时调用print方法
Demo d = null;
d = Demo.getInstance() ;
d.print();
}
}
class Demo {
// 构造方法被私有化了
private Demo() {
}
public static Demo getInstance() {
return new Demo();
}
public void print() {
System.out.println("Hello World!!!");
}
}
分析:
为什么要将构造方法私有化?
问:如果要限制一个类对象产生,即:一个类只能有一个实例化对象,该怎么做?
答:实例化对象肯定要调用构造方法,如果将构造方法藏起来,则外部肯定无法直接调用,就肯定不能用new关键字调用构造方法实例。
public class Demo09 {
public static void main(String args[]) {
// 要求:实例化Demo对象,同时调用print方法
Demo d1 = null;
d1 = Demo.getInstance();
d1.print();
Demo d2 = null;
d2 = Demo.getInstance();
d2.print();
}
}
class Demo {
// 构造方法被私有化了
// 在类的内部准备好一个实例化对象
private static Demo d = new Demo();
private Demo() {
}
public static Demo getInstance() {
return d;
}
public void print() {
System.out.println("Hello World!!!");
}
}
所以此设计在系统中称为单例设计(单态设计),在windows中也有此设计的存在。Windows中的回收站,所有的盘都共享同一个回收站,这就是一个典型的单态设计。
多例设计:
在类中会准备出多个对象,之后根据传入的参数不同,可以返回不同的对象。
public class Demo08 {
public static void main(String args[]) {
// 要求:实例化Demo对象,同时调用print方法
Demo d1 = null;
d1 = Demo.getInstance(1);
d1.print();
Demo d2 = null;
d2 = Demo.getInstance(2);
d2.print();
}
}
class Demo {
// 构造方法被私有化了
// 在类的内部准备好一个实例化对象
private static Demo d1;
private static Demo d2;
private Demo() {
}
public static Demo getInstance(int t) {
if (t == 1) {
if (d1 == null) {
d1 = new Demo();
}
return d1;
} else if (t == 2) {
if (d2 == null) {
d2 = new Demo();
}
return d2;
} else {
return null;
}
}
public void print() {
System.out.println("Hello World!!!");
}
}