标签:string int 没有 plain run 直接 返回 简单 饿汉
设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。
实现步骤:
1) 构造器私有化
2) 类的内部创建对象
3) 向外暴露一个静态的公共方法。getDog,getCat。
package codeBlock; ? public class Singleton { ? public static void main(String[] args) { Dog dog1 = Dog.getDog(); Dog dog2 = Dog.getDog(); System.out.println(dog1.getName()); //旺财 System.out.println(dog2.getName()); //旺财 System.out.println(dog2 == dog1); //true Cat cat1 = Cat.getCat(); Cat cat2 = Cat.getCat(); System.out.println(cat1.getName()); //布偶 System.out.println(cat2.getName()); //布偶 System.out.println(cat2 == cat1); //true } ? } ? //饿汉模式:声明一个对象,将其初始化并作为一个静态属性,在外部需要此类对象时,直接返回此对象。 class Dog{ private String name; private static Dog dog = new Dog("旺财"); //静态属性,所以只有一个dog private Dog(String name) { this.name = name; } public static Dog getDog() { return dog; } public String getName() { return name; } ? public void setName(String name) { this.name = name; } } ? //懒汉模式:声明一个对象,并作为一个静态属性,在外部需要此类对象时将其初始化,再返回此对象。 class Cat{ private String name; private static Cat cat ; //静态属性,所以只有一个cat private Cat(String name) { this.name = name; } public static Cat getCat() { if(cat == null) { cat = new Cat("布偶"); } return cat; } public String getName() { return name; } ? public void setName(String name) { this.name = name; } }
二者最不同的点在于对象声明的时机。饿汉模式是在类加载时,就声明并初始化一个对象作为静态变量,而懒汉模式是在类加载时声明一个静态属性,在外部需要实例时再创建对象。
饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
java.lang.Runtime就是经典的单例模式。
标签:string int 没有 plain run 直接 返回 简单 饿汉
原文地址:https://www.cnblogs.com/SongHai/p/14128829.html