1. 概述
多例设计模式,限制本对象的实例个数。
特点:构造方法私有化,类内部提供几个实例化对象,然后通过static方法获得。
2. 示例程序
构造方法私有化,外部类就不能再创建该类的实例,这样才能保证本对象的实例个数。
private MyDuoLi(String value) {
this.value = value;
}
类内部提供几个实例化对象:
private static final MyDuoLi DUO_LI1 = new MyDuoLi("duoLi1");
private static final MyDuoLi DUO_LI2 = new MyDuoLi("duoLi2");
private static final MyDuoLi DUO_LI3 = new MyDuoLi("duoLi3");
通过static方法获得,static方法,静态方法,通过类名就可以访问一个类的静态方法:
public static String getInstance(int op) {
switch (op) {
case 1 : return DUO_LI1.getValue();
case 2 : return DUO_LI2.getValue();
case 3 : return DUO_LI3.getValue();
default: return null;
}
}
完整代码如下所示:
public class MyDuoLi {
private static final MyDuoLi DUO_LI1 = new MyDuoLi("duoLi1");
private static final MyDuoLi DUO_LI2 = new MyDuoLi("duoLi2");
private static final MyDuoLi DUO_LI3 = new MyDuoLi("duoLi3");
private String value;
public static String getInstance(int op) {
switch (op) {
case 1 : return DUO_LI1.getValue();
case 2 : return DUO_LI2.getValue();
case 3 : return DUO_LI3.getValue();
default: return null;
}
}
private MyDuoLi(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public static void main(String args[]) {
System.out.println(MyDuoLi.getInstance(1));
System.out.println(MyDuoLi.getInstance(2));
System.out.println(MyDuoLi.getInstance(3));
}
}
运行截图如下所示:
2. 枚举(enum)实现多例
完整代码如下所示,枚举的更多用法:链接。
public enum MyDuoLiByEnum {
DUO_LI1,DUO_LI2,DUO_LI3;
public static void main(String[] args) {
System.out.println(MyDuoLiByEnum.DUO_LI1);
System.out.println(MyDuoLiByEnum.DUO_LI2);
System.out.println(MyDuoLiByEnum.DUO_LI3);
}
}
运行截图: