单例模式

2018-04-05  本文已影响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

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

上一篇下一篇

猜你喜欢

热点阅读