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);
    }
}

运行截图:

多例设计模式_静态方法_02