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);
}
}
運行截圖: