- 构造方法私有化
- 静态属性指向实例
- public static的 getInstance方法,返回第二步的静态属性、
饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载。
如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。
懒汉式,是延迟加载的方式,只有使用的时候才会加载。 并且有线程安全的考量(鉴于同学们学习的进度,暂时不对线程的章节做展开)。
使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。
看业务需求,如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式
使用饿汉式单例模式, 把Hero类改造成为单例模式
使用懒汉式单例模式,把Item类改造成为单例模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| class Item//使用饿汉式单例模式, 把Hero类改造成为单例模式 //使用懒汉式单例模式,把Item类改造成为单例模式 { private Item(){}; public static Item b; public static Item getb() { if(b==null) { b=new Item(); } return b; }
String name; float price; } class Hero { private Hero(){} public static Hero a= new Hero(); String name; float hp; float armor; int moveSpeed; void output() { System.out.println("英雄名称:"+name+"\n英雄生命值:"+hp+"\n英雄护甲:"+armor+"\n移动速度:"+moveSpeed); } public static Hero geta() { a.name="大龙"; return a; } } public class day0922a { public static void main(String[] args) { Hero a1=Hero.geta(); Hero a2=Hero.geta(); Hero a3=Hero.geta(); Hero a4=Hero.geta(); System.out.println(a1==a2); System.out.println(a3==a4); Item b1= Item.getb(); Item b2= Item.getb(); Item b3= Item.getb(); Item b4= Item.getb(); System.out.println(b1==b2); System.out.println(b3==b4); } } 结果都为为true
|
原文作者: 赖卓成
原文链接: https://lzcxfz.github.io/2019/11/08/单例模式/
版权声明: 转载请注明出处(必须保留作者署名及链接)