java的设计模式 * 《单例模式》 * 让一个类在运行过程中只能有一个对像 * 三个方法实现单例的例子 * 1,程序员式 * 2,懒汉式 * 3,饿汉式(推荐,开发中最常用)
第一种:
public class Dog {
/**程序员式
* */
//私有化对象
private Dog(){};
//维护一个最终的静态的共有的对象
public final static Dog getInstance=new Dog();
}
第二种:
public class Person {
//懒汉式(延时加载模式!!!!)
//私有化构造方法,外界不能访问
private Person(){}
//维护一个私有的静态的自己的引用
private static Person person;
//提供静态的最终的getInstence方法
//通过synchronized关键字吧方法锁住,
// 可以保证同一时刻只有一个线程可以调用此方法,确保了对象的唯一
public final static synchronized Person getInstence(){
if(person==null){
person=new Person();
}
return person;
}
}
第三种:
public class Cat {
/**饿汉式(推荐)
* */
//为了不让外界随意调用,私有构造方法
private Cat(){}
//维护一个私有的静态的最终的对象
private final static Cat cat=new Cat();
//声明一个get方法,用来让外界获取唯一的对象
public static Cat getInstance(){
return cat;
}
}
测试类
public class Test {
public static void main(String[] args) {
//获得Dog对象,不能直接new,因为构造方法被私有化了
// Dog dog=new Dog();
//通过Dog的静态方法获得Dog的对象
Dog dog1 = Dog.getInstance;
Dog dog2 = Dog.getInstance;
// //对象的地址值相同说明对象是同一个
System.out.println(dog1);//it.singleton_pattern.Dog@50cbc42f
System.out.println(dog2);//it.singleton_pattern.Dog@50cbc42f
//获取Cat对像
Cat cat1 = Cat.getInstance();
Cat cat2 = Cat.getInstance();
//对象的地址值相同说明对象是同一个
System.out.println(cat1);//it.singleton_pattern.Cat@282ba1e
System.out.println(cat2);//it.singleton_pattern.Cat@282ba1e
//通过Person
Person person1 = Person.getInstence();
Person person2 = Person.getInstence();
//对象的地址值相同说明对象是同一个
System.out.println(person1);//it.singleton_pattern.Person@f5f2bb7
System.out.println(person2);//it.singleton_pattern.Person@f5f2bb7
}
}