zoukankan      html  css  js  c++  java
  • (三十二)单例设计模式

    /**
    设计模式:解决某一类问题最有效的方式(23种设计模式)
    单例设计模式:保证一个类只有一个对象
    1.构造函数私有化,禁止外部使用实例化new
    2.再类内部创建一个自身类型的对象
    3.使用一个public的函数将该对象返回
    */
    class Demo14
    {
        public static void main(String[] args)
        {
            //Single s1 = new Single();
            //Single s2 = new Single();
            Single s1 = Single.getInstance();
            Single s2 = Single.getInstance();
            System.out.println(s1==s2);//true实现了一个类只有一个对象
        }
    }
    //饿汉式(推荐使用)
    class Single
    {
        private Single() {}
        private static Single s = new Single();//无论getInstance方法会不会被调用,该对象都会创建
        public static Single getInstance()
        {
            return s;
        }
    }
    //懒汉式(多线程使用有问题)
    class Single2
    {
        private static Single2 s;
        private Single2() {}
        public static Single2 getInstance()
        {
            if(s==null)
                s = new Single2();
            return s;
        }
    }
    

      

    单例设计模式的使用 
    /**
    这是单例设计模式的简单使用,实现工厂的零件的加功,不同车间加载一批零件
    @author czy
    @version 1.0
    */
    class Demo15
    {
        public static void main(String[] args)
        {
            Factory f1 = Factory.getInstance();
            for(int i = 0;i<5;i++) {
            f1.JiaGong();//1,2,3,4,5
            }
            Factory f2 = Factory.getInstance();
            f2.JiaGong();//6
            f2.JiaGong();//7
        }
    }
    class Factory
    {
        private Factory() {}
        private int num;
        private static Factory f = new Factory();
        public static Factory getInstance()
        {
            return f;
        }
        public void JiaGong()
        {
            System.out.println("这是加工的第" + ++num + "个零件");
        }
     
    }
     
    单例模式的使用二:
    class Demo16
    {
        public static void main(String[] args)
        {
            SuperMan sm1 = SuperMan.getInstance();
            System.out.println(sm1.getName());
        }
    }
    class SuperMan
    {
        private String name;
        private SuperMan() {}
        private SuperMan(String name)
        {
            this.name = name;
        }
        private static SuperMan sm = new SuperMan("克拉克");
        public static SuperMan getInstance()
        {
            return sm;
        }
        public String getName()
        {
            return name;
        }
     
    }
     
     
  • 相关阅读:
    Virtuabox 虚拟机克隆方法
    CentOS 7 防火墙 出现Failed to start iptables.service: Unit iptables.service failed to load
    Linux系统下安装rz/sz命令及使用说明
    os、sys模块
    collections、random、hashlib、configparser、logging模块
    time、datatime模块
    正则表达式、re模块
    递归、二分查找法
    内置函数、匿名函数
    生成器进阶、生成器表达式
  • 原文地址:https://www.cnblogs.com/bgwhite/p/9377781.html
Copyright © 2011-2022 走看看