Java设计模式之单例设计模式 入门实例
一、基础概念
(1).单例设计模式:保证一个类在内存中的对象唯一性。
(2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作。一个程序要基于另一个程序操作后的结果进行操作。
(3)步骤:
1.构造函数私有化
2.自己new创建一个本类对象。
3.对外提供一个方法,让其他程序可以获取到这个对象。
(4)饿汉式:代码以上来就创建一个本类对象。
懒汉式:有数据传入时,才会创建一个本类对象。
二、饿汉式(非延迟加载形式)
(1).示例代码
1 class Single 2 { 3 //构造函数私有化 4 private Single(){} 5 //一上来就创建一个本类对象 6 static Single s = new Single(); 7 8 ////对外提供一个方法getInstance,让其他程序可以获取到这个对象。 9 public static Single getInstance() 10 { 11 return s; 12 } 13 14 } 15 class SingleDemo 16 { 17 public static void main(String[] args) 18 { 19 20 Single s1 = Single.getInstance(); //调用对象而不直接调用值,是为了可控。 21 Single s2 = Single.getInstance(); 22 System.out.println(s1==s2); 23 } 24 }
(2).代码运行
三、懒汉式(延迟加载形式)
(1).示例代码
1 class Single 2 { 3 //有数据传入时,才会去创建本类对象。 4 private static Single s = null; 5 private Single(){} 6 7 public static Single getInstance()//提供接口,获取实例 8 { 9 if(s==null) 10 s = new Single(); 11 return s; 12 } 13 } 14 class SingleDemo 15 { 16 public static void main(String[] args) 17 { 18 19 Single s1 = Single.getInstance(); //调用对象而不直接调用值,是为了可控。 20 Single s2 = Single.getInstance(); 21 System.out.println(s1==s2); 22 } 23 }
(2).代码运行
四、实例代码
p的名字是王小红,外界p1、p2都可以访问和修改p的名字。当p2修改p的名字为小红后,p1、p2访问p的名字都为小红。
1 class Person 2 { 3 //构造函数私有化 4 private String name; 5 private Person(String name) 6 { 7 this.name = name; 8 } 9 //创建一个本类对象,p的名字为wangxiaohong 10 private static Person p = new Person("wangxiaohong"); 11 12 //对外提供一个方法getInstance,让其他程序可以获取到这个对象。 13 public static Person getInstance() 14 { 15 return p; 16 } 17 18 public void setName (String name) 19 { 20 this.name = name; 21 } 22 23 public String getName() 24 { 25 return this.name; 26 } 27 public void sleep() 28 { 29 System.out.println(name+".....sleep....."); 30 } 31 32 } 33 class SingleDemo2 34 { 35 public static void main(String[] args) 36 { 37 Person p1 = Person.getInstance(); 38 Person p2 = Person.getInstance(); 39 p2.setName("xiaohong");//p的名字修改为xiaohong 40 41 //p1和p2都是同一个对象p。 42 p1.sleep(); 43 p2.sleep(); 44 } 45 }
五、代码运行