单例设计模式
单例设计模式
什么是设计模式
静态方法和属性的经典使用
设计模式是:在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决方法
什么是单例模式
单个实例的设计模式
所谓类的单例设计模式,就是采用一定的方法保证在整个的软件系统中,对某个类只能存在一个对象的实例,并且该类只提供一个取得其对象实例的方法
单例模式的分类:
饿汉式
懒汉式
饿汉式与懒汉式的区别
二者最大的区别是:创建时机不同:饿汉式在类加载的时候就创建了对象实例。而懒汉式是在使用时才存在
饿汉式不存在线程安全问题,懒汉式存在线程安全问题-----(当多个线程同时进入判断时)
饿汉式存在浪费资源的可能,因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了。懒汉式是使用时才创建,就不存在这个问题
javaSE标准类中,java.lang.Runtime就是经典的单例模式
饿汉式
步骤实现:
构造器私有化
类的内部创建对象
向外暴露一个静态的公共方法。getInstance
代码实现:
/** * 饿汉式 * 1. 构造器私有化-----防止在类的外部直接创建 * 2. 在类的内部创建对象(该对象是静态的) * 3. 向外暴露一个静态的公共方法。getInstance * 他为什么是饿汉式 * 因为: * 当调用类的静态变量时,会导致类被加载,静态的对象会被执行。静态对象一执行,那么这个对象就会存在了 */public class SingleTon01 { public static void main(String[] args) { Cat instance = Cat.getInstance(); System.out.println(instance); Cat instance1 = Cat.getInstance(); System.out.println(instance1); //instance对象与instance1同一个对象 System.out.println(instance==instance1);//true }}class Cat{ private String name; public static int n1 = 100; //为了在静态方法中,返回其对象,需要将其修饰为静态方法 //对象,通常为重量级的对象,饿汉式可以会造成创建了对象,但没有使用,会造成资源的浪费 private static Cat cat = new Cat("小红"); private Cat(String name) { this.name = name; } public static Cat getInstance(){ return cat; } @Override public String toString() { return "Cat{" + "name='" + name + '\'' + '}'; }}
懒汉式
步骤:
1.构造器私有化
2.定义一个私有的静态属性对象
3.提供一个public 的static方法---中间加判断
代码实现:
/** * 懒汉式 * * 当类被调用是,不会创建对象,需要自己调用,后面再次调用,会返回上次创建的对象,从而保证了单例 */public class SingleTon02 { public static void main(String[] args) { Dog instance = Dog.getInstance(); System.out.println(instance); //第二次调用的时候,会得到上次创建的对象 Dog instance1 = Dog.getInstance(); System.out.println(instance1); System.out.println(instance==instance1);//true }}class Dog{ private String name; private static Dog dog; private Dog(String name) { this.name = name; } public static Dog getInstance(){ if(dog == null){ dog = new Dog("大黄"); } return dog; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + '}'; }
赞 (0)