美文网首页
单例模式

单例模式

作者: 爱吃浆果的懒猫 | 来源:发表于2018-04-05 00:34 被阅读0次

      单例模式提供了一种创建对象的方式。单一的类负责创建自己的对象,同时确保只有单个对象被创建该类提供一种访问其唯一对象的方式,直接访问不需要实例化。
      下面是一个单例模式模拟火车站售票的例子:
      创建一个Tickets类,票数作为单例,
    代码如下:

    public class Tickets2 {
        public int tickcount=100;
        //创建Tickets2的一个对象
        private static Tickets2 instance =null;
        //让构造函数为private,这样该类就不会被实例化
        private Tickets2(){
            
        }
        //获取唯一可用的对象
        public static Tickets2 getInstance(){
            if (instance == null) {
                instance = new Tickets2();
            } 
            return instance;
        }
    
    }
    

      接着创建一个售票类,负责实现售票功能,代码如下:

    public class SellTickets2 extends Thread {
        Tickets2 object=Tickets2.getInstance();
         public  void sellTicket(){
             synchronized (SellTickets2.class){
                 if(object.tickcount>0)
                    {
                        --object.tickcount;
                        System.out.println(Thread.currentThread().getName()
                                +"  正在卖票,还剩"
                                +object.tickcount+"张票");
                    }
                    else{
                        System.out.println("您好,票已经卖完!");
                        return;
                    }
             
             }
    
        }
        @Override
      public  void run(){
    
            while (object.tickcount>0)//循环指线程不停的卖票
            {
                sellTicket();
                try{
                    Thread.sleep(100);
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }
    
    

    &nbsp 最后我们创建测试类,测试是否实现我们所想的功能,代码如下:

    public class TicketsMain2 {
        public static void main(String[] args)
        {
            Thread tm = new SellTickets2();
            Thread tm2 = new SellTickets2();
            Thread tm3 = new SellTickets2();
            tm.setName("火车北站窗口一");
            tm2.setName("火车北站窗口二");
            tm3.setName("火车北站窗口三");
            
            tm.start();
            tm2.start();
            tm3.start();
            
        }
    
    }
    
    

      测试结果:


    简书单例.png

      最后,这只是很简单的单例模式应用,只是描述其实现,还有很多不足的地方,作为学习过程中的一种记录,大佬勿喷··· ̄□ ̄||

    相关文章

      网友评论

          本文标题:单例模式

          本文链接:https://www.haomeiwen.com/subject/zozlhftx.html