单例模式提供了一种创建对象的方式。单一的类负责创建自己的对象,同时确保只有单个对象被创建该类提供一种访问其唯一对象的方式,直接访问不需要实例化。
下面是一个单例模式模拟火车站售票的例子:
创建一个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();
}
}
}
}
  最后我们创建测试类,测试是否实现我们所想的功能,代码如下:
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();
}
}
测试结果:
最后,这只是很简单的单例模式应用,只是描述其实现,还有很多不足的地方,作为学习过程中的一种记录,大佬勿喷··· ̄□ ̄||