Singleton Patten

v Objectives of Singleton Pattern
Create a class and let it manage one and only one instance of itself
Prevent other classes from creating a new instance
Provide a global access point to the instance
 
 
v Step 1:
Provide a private constructor so that no one can directly create an object of the class
v Step 2:
Provide a public static getter inside the same class, that returns a unique instance of the class
 
 
v Step 1:

public class RegHandler{

private static RegHandler regHandler;//only one instance

private RegHandler(){} /* prevents other classes from

}  instantiating the class */

v Step 2:

public class RegHandler{

private static RegHandler regHandler;

private RegHandler(){}

public static RegHandler getInstance(){//getter method

  if (regHandler==null){ //if object doesn’t exist

  regHandler=new RegHandler();//creates only one instance

  }

  return regHandler;//returns existing object’s reference

}}

 

example: recode the oob-case1 student register 

class Student
{
    String missionId;
    String name;
    int age;
    public Student()
    {
        name = null;
        age = 0;
        System.out.println("Student begin to regist");
    }
    public Student(String s, int i)
    {
        name = s;
        age = i;
    }
    public void getMissionId()
    {
        //Registrar r = new Registrar();
        Registrar r = Registrar.getRegistrar();
        missionId = r.getMissionId(this);
    }
}

class Registrar
{
    private static int id = 0;
    private static Registrar r;
    private Registrar()
    {
        System.out.println("Registrar is begin now");
    }
    public static Registrar getRegistrar()
    {
        if(r == null )
            r = new Registrar();
        return r;
    }
    public String getMissionId(Student s)
    {
        Validator v = Validator.getValidator();
        if(v.missionId(s))
        {
            id++;
        }
        String missionId = "S000"+id;
        return missionId;
    }
}

class Validator
{
    private static Validator v;
    private Validator()
    {
        System.out.println("Validator is begin now");
    }
    public static Validator getValidator()
    {
        if(v == null)
            v = new Validator();
        return v;
    }
    public boolean missionId(Student s)
    {
        if (s.age<18)
            return false;
        return true;
    }
}
public class UniversityRegistation {
   
    /** Creates a new instance of UniversityRegistation */
    public UniversityRegistation() {
        System.out.println("The system is working now");
    }
   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Student s = new Student("bobo",26);
        s.getMissionId();
        System.out.println(s.name+"   "+s.age+"   "+s.missionId);
         Student ss = new Student("shirley",22);
        ss.getMissionId();
        System.out.println(ss.name+"   "+ss.age+"   "+ss.missionId);
       
    }
   
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值