1.设计模式概述
- 设计模式是在大量的实践中总结和理论化之后优选的代码,编程风格,以及解决问题的思考方式.设计模式免去我们自己再思考.
- 经典的设计模式共有23种,每种设计模式均是特定环境下特定问题的处理方式.
2.何为单例模式
- 所谓类的单例模式,就是采取一定的方法保证在整个软件系统中,对某个类只存在一个对象实例.并且该类只提供一个取得其对象实例的方法.
3.实现思路
- 如果我们要让类在一个虚拟机中只产生一个对象,我们首先将类的构造器设置为private,这样就不能在类的外部通过new关键字创建对象(在该类外部无法通过构造器加载类的对象).但在类的内部仍然可以产生该类的对象.
- 因为在类的外部无法创造类的对象,故只能调用类的某个静态方法返回类内部创建的对象("类.xx静态方法").静态方法只能访问类中的静态成员变量.所以返回实例的静态方法内的成员变量也均为静态的.
4.单例模式设计的两种思路
(1). 饿汉式 :
- 特点 : "立即加载",随着类的加载而加载,当前的唯一实例已创建.
- 优点 : 写法简单,由于内存中较早加载,使用更方便,更快,线程更安全.
- 缺点 : 内存中占用时间较长.
(2). 懒汉式
- 特点 : "延迟加载",在需要实例的时候才创建.
- 优点 : 在需要的时候创建,更节省内存
- 缺点 : 线程不安全.
public class Singleeton { } class HungryMan { //1.类的构造器的私有化 private HungryMan() { } //2.在类的内部创造当前类的实例 //4.且该hungryman属性也声明为static的 private static HungryMan hungryman = new HungryMan(); //3.通过geyInstance2的方法获取当前类的实例,必须声明为static public static HungryMan getInstance1() { return hungryman; //return HungryMan.hungryman; } } class LazyMan { //1.类的构造器的私有化 private LazyMan() { } //2、。在类的内部创造当前类的实例 //4.且该hungryman属性也声明为static的 private static LazyMan lazyman = null; //3.通过geyInstance2的方法获取当前类的实例,如果未创建对象,则在方法内部创建对象 public static LazyMan getInstance2() { if (lazyman == null) { lazyman = new LazyMan(); } return lazyman; //return LazyMan.lazyman; } }