设计模式之单例模式

来源:互联网 发布:淘宝买家反骚扰知乎 编辑:程序博客网 时间:2024/05/08 12:40
public class Singleton {//饿汉式private static final Singleton  singleton = new Singleton();//构造方法私有,限制产生多个实例private Singleton(){}//获得实例public static Singleton getSingleton(){return singleton;}//类其它方法,尽量是staticpublic static void doSomething(){}}


确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。



/* * 单例模式的变通,有上限的单例模式 *  */public class Emperor {//设有两位皇帝private static int maxNumOfEmperor = 2;//单例模式中,成员属性与方法尽量static//保存皇帝名称private static ArrayList<String> nameList = new ArrayList<String>();//保存皇帝实例private static ArrayList<Emperor> emperorList = new ArrayList<Emperor>();//当前皇帝Numberprivate static int numEmperor = 0;//生产实例static {for (int i=0; i<maxNumOfEmperor; i++){emperorList.add(new Emperor("emperor"+i));}}//构造方法私有private Emperor(){}//构造方法私有private Emperor(String name){nameList.add(name);}//获得实例,但是随机的public static Emperor getInstance(){Random random = new Random();numEmperor = random.nextInt(maxNumOfEmperor);return emperorList.get(numEmperor);}//类中的其它方法,staticpublic static void say(){System.out.println(nameList.get(numEmperor));}}

public class Minister {    public static void main(String[] args) {        // 设有5位大臣依次向皇帝敬礼,皇帝随机        int ministerNum = 5;        for(int i=0; i<ministerNum; i++){            Emperor emperor = Emperor.getInstance();            System.out.print("Minister-"+i+" is greeting: ");            emperor.say();        }    }}


0 0
原创粉丝点击