黑马程序员技术交流社区

标题: Java基础学习日记 - 单例设计模式 [打印本页]

作者: qihuan    时间: 2015-7-4 08:15
标题: Java基础学习日记 - 单例设计模式
本帖最后由 qihuan 于 2015-7-6 21:18 编辑
  1. package practice;

  2. /**
  3. * 设计模式:解决一类问题最行之有效的解决方法
  4. * java中的设计模式:
  5. * 单例设计模式:解决一个类在内存只存在一个对象
  6. *                          第一步:为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象
  7. *                          第二步:还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象
  8. *                          第三步:为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式
  9. * 代码体现:
  10. * 1.将构造函数私有化
  11. * 2.在类中创建一个本类对象
  12. * 3.提供一个方法可以获取到本类对象
  13. *
  14. * 应用:事物的描述不变,当需要该事物的对象保证在内存的唯一时,就将三步加上即可。
  15. * @author Qihuan
  16. *
  17. */

  18. //先初始化对象(饿汉式)
  19. //特点:Single类一进内存,就已经创建好了对象
  20. //Tips:开发一般用饿汉式,因为它安全简单
  21. class Single{
  22.         
  23.         private int num;
  24.         
  25.         public int getNum() {
  26.                 return num;
  27.         }

  28.         public void setNum(int num) {
  29.                 this.num = num;
  30.         }
  31.         
  32.         private Single(){}
  33.         public static Single s = new Single();
  34.         public static Single getInstance(){
  35.                 return s;
  36.         }
  37. }

  38. public class SingleDemo {
  39.         public static void main(String[] args) {
  40.                 Single s1 = Single.getInstance();
  41.                 Single s2 = Single.getInstance();
  42.                 s1.setNum(2);
  43.                 System.out.println(s2.getNum());
  44.         }
  45. }
复制代码
  1. package practice;

  2. /**
  3. * 单例设计模式的第二种方法(懒汉式)
  4. * @author Qihuan
  5. *
  6. */

  7. //对象是方法被调用时,才初始化,也叫做对象的延时加载,称为:懒汉式。
  8. //Single类进内存,对象还没有存在,只有调用getInstance方法时,才建立对象
  9. //Tips:由于代码较长,所以不宜用
  10. class Single2 {
  11.         
  12. private int num;
  13.         
  14.         public int getNum() {
  15.                 return num;
  16.         }

  17.         public void setNum(int num) {
  18.                 this.num = num;
  19.         }
  20.         
  21.         private Single2(){}
  22.         public static Single2 s = null;
  23.         public static Single2 getInstance(){
  24.                 if (s == null) {
  25.                         synchronized (Single.class) {
  26.                                 if(s==null)
  27.                                         s = new Single2();
  28.                         }
  29.                 }
  30.                
  31.                 return s;
  32.         }
  33. }

  34. public class SingleDemo2 {
  35.         public static void main(String[] args) {
  36.                 Single2 s1 = Single2.getInstance();
  37.                 Single2 s2 = Single2.getInstance();
  38.                 s1.setNum(2);
  39.                 System.out.println(s2.getNum());
  40.         }
  41. }
复制代码

作者: fantianfei    时间: 2015-7-4 09:35
有做笔记习惯的学员都是好学员。
作者: Morgan    时间: 2015-7-4 10:01
感谢分享,学习了
作者: zhangshuai_123    时间: 2015-7-4 10:21
继续努力,让我们一起上黑马。
作者: 爱李萝卜    时间: 2015-7-4 18:34
努力,加油
作者: keto    时间: 2015-7-4 21:04
学习了~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2