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);

}

}

你可能感兴趣的:(Singleton)