单利设计模式
单利设计模式,也就是指将对象的构造方法私有化,禁止直接创建一个新的对象,对于此类的创建对象的操作都将返回同一个对象,可以合理的保证对象的唯一性,单利设计模式分为三种形式,分别为懒汉式与饿汉式以及使用静态内部类实现单利设计模式,
- 下面是一个简单的懒汉式单利模式的示例,懒汉式是相对饿汉式来说是一个占用内存时间短的模式,在使用时才对其进行赋值。但是这样一来也使得懒汉式的线程不安全,所以需要为其加上线程锁。
/**
* 懒汉式 单利设计模式
*/
class ChairMan{
private static ChairMan cm = null;
private String name;
private ChairMan(String name) {
this.name = name;
}
public String getName(){
return name;
}
public static ChairMan getCM() {
synchronized(ChairMan.class) {
if (cm == null) {
cm = new ChairMan("天柱");
}
return cm;
}
}
}
- 下面是一个简单的饿汉式的例子,与懒汉式不同的地方在于,饿汉式在类中一开始变对唯一的对象进行了声明,因此只要类被加载,便占用了堆的内存空间,而好处也即是线程安全。
/**
* 饿汉式 单利设计模式
*/
class ChairMan1{
private static ChairMan1 cm = new ChairMan1("天柱");
private String name;
private ChairMan1(String name) {
this.name = name;
}
public String getName(){
return name;
}
public static ChairMan1 getCM() {
return cm;
}
}
- 下面是一个简单的使用静态内部类实现单例设计模式的例子,使其在实现线程安全的同时也实现了延迟加载,同时具备了懒汉式与饿汉式的优点,也避免了缺点。
class Pat{
private Pat() {
}
public static Pat getPat() {
return Field.pat;
}
public void setAge(int age) {
Field.field.age = age;
}
public void getField() {
System.out.println(Field.field.name + "是一只" + Field.field.gender + "的" + Field.field.species);
}
private static class Field{
public static Field field = new Field("狸花猫", "大锤", "公", 1);
private static Pat pat = new Pat();
public String species;
public String name;
public String gender;
public int age;
public Field(String species, String name, String gender, int age) {
this.species = species;
this.name = name;
this.gender = gender;
this.age = age;
}
}
}