单例设计模式
单例模式介绍
1. 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中 2. 分类(两种方式) (2)懒汉式
单例模式的实现方法
(1)类的内部创建对象 (3)向外暴露一个静态的公共方法:用于返回对象(getinstance)
单例模式的经典案例
javaSE 标准类中,java.lang.Runtime 就是经典 的单例模式 。
一、饿汉式
解释:只要类加载,无论是否使用该类的实例对象,都会在类中创建对象实例
形象理解:很饿,饥渴难耐,无论是否使用该对象,都会创建
代码示例
package pattern. sigal ; public class main { public static void main ( String [ ] args) { girlfriend instance = girlfriend. getinstance ( ) ; System . out. println ( instance) ; }
} class girlfriend{ private String name; private static girlfriend gf = new girlfriend ( "女朋友" ) ; private girlfriend ( String name) { System . out. println ( "构造器被调用" ) ; this . name = name; } public static girlfriend getinstance ( ) { return gf; } @Override public String toString ( ) { return "girlfriend{" + "name='" + name + '\'' + '}' ; }
}
构造器被调用
girlfriend{ name= '女朋友' }
二、懒汉式
解释:只有在对象被使用时才会创建
形象理解:很懒,有需求了才做
代码示例
package pattern. lazy ; public class main { public static void main ( String [ ] args) { Cat cat = Cat . getInstance ( ) ; System . out. println ( cat) ; Cat cat1 = Cat . getInstance ( ) ; System . out. println ( cat1) ; System . out. println ( cat == cat1) ; }
} class Cat { private String name; private static Cat cat; private Cat ( String name) { System . out. println ( "构造器被调用" ) ; this . name = name; } public static Cat getInstance ( ) { if ( cat == null ) { cat = new Cat ( "小猫" ) ; } return cat; } @Override public String toString ( ) { return "Cat{" + "name='" + name + '\'' + '}' ; }
}
构造器被调用
Cat { name= '小猫' }
Cat { name= '小猫' }
true
饿汉式 和懒汉式 对比
1. 最主要的区别:创建对象的时机不同 2. 关于线程安全问题 (1)饿 汉式:不存在 补充说明:后面学习线程后,再完善 (1)饿汉式:存在 浪费资源的可能 解释:只要类加载,就会执行创建对象 实例,如果对象 实例没有被使用 ,就造成了资源的浪费 解释:懒汉式模式下,对象在使用时才创建 ,就不存在这个问题。