单例模式浅理解

来源:互联网 发布:js点击按钮执行方法 编辑:程序博客网 时间:2024/05/29 16:48

//single 实例 一次只能有一个打印任务,但是却有n台打印机,我们随机的安排打印机
 class LoadBalancer
 {
  private Random rd=new Random();
  private static LoadBalancer ld=null;
  ArrayList<String> serverLs=new ArrayList<String>();
  protected LoadBalancer()
  {
   serverLs.add("server1");
   serverLs.add("server2");
   serverLs.add("server3");
   serverLs.add("server4");
  }
  public static synchronized LoadBalancer getInstance()
  {
   if(ld==null)
   {
    ld=new LoadBalancer();
   }
   return ld;
  }
 
  public String getServer()
  {
  int i= rd.nextInt(serverLs.size());
  return serverLs.get(i).toString();
  }

 }

我们的测试类:

public class MotherTest {
 

 public static void main(String[] args)
 {
  MotherTest mt=new
    MotherTest();
  mt.TestSin3();
 }

 

 public void TestSin3()
   {
    LoadBalancer l1= LoadBalancer.getInstance();
    LoadBalancer l2= LoadBalancer.getInstance();
    LoadBalancer l3= LoadBalancer.getInstance();
    LoadBalancer l4= LoadBalancer.getInstance();
    if((l1==l2)&& (l2==l3)&& (l3==l4)&&(l4==l1))
    {
     System.out.println("ok");
    }
    System.out.println(l1.getServer());
    System.out.println(l2.getServer());
    System.out.println(l3.getServer());
    System.out.println(l4.getServer());
   }

}