A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 逆袭白富美 中级黑马   /  2015-7-12 21:33  /  649 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

设计模式:解决某一类问题行之有效的解决办法(思想)。
单例(Singleton)设计模式:
学习设计模式必须先弄清楚它是解决什么问题的。
单例是解决什么问题的呢?
可以保证一个类的对象唯一性。

场景:比如多个程序都要使用一个配置文件中的数据,而且要实现数据共享和交换。
                必须要将多个数据封装到一个对象中。而且多个程序操作的是同一个对象。
                那也就是说必须保证这个配置文件对象的唯一性。

怎么能保证对象的唯一性呢?
1,一个类只要提供了构造函数,就可以产生多个对象。
        完全无法保证唯一。
既然数量不可控,干脆,不让其他程序建立对象。

2,不让其他程序创建,对象何在?
        干脆,自己在本类中创建一个对象,这样好处是什么,可控。

3,创建完成后,是不是要给其他程序提供访问的方式。


怎么实现这个步骤呢?
1,怎么就能不其他程序创建对象呢?
        直接私有化构造函数,不让其他程序创建的对象初始化。

2,直接在本类中new一个本类对象。

3,定义一个功能,其他程序可以通过这个功能获取到本类的对象。

11 个回复

倒序浏览
我们马上就要学习这里的东西了,很有帮助
回复 使用道具 举报
要是加上代码的实现就更好叻。
回复 使用道具 举报
还没有学到   提前看看
回复 使用道具 举报
本帖最后由 一枚小小媛 于 2015-7-12 23:00 编辑

单例除了主体思想“保证对象唯一性之外”,还有就是可以通过理解性的去编写这个类,就能更易如反掌。
①思路是:“单例”,首先把无参构造函数私有化。这样在new 对象的时候,就不能再使用它了。
②声明一个私有的 本类对象,并且new出来。
③对外提供一个方法,可以获取这个类对象。比如getInstance()。方法体的内容就是获取这个对象。
④既然无参构造函数已经被私有化,我们无法直接获取对象,而必须要调用上面提到的getInstance()方法,获取事先定义(又分支为两种 1、饿汉式 2、懒汉式)好的类对象,保证了每次调用方法获取对象,都是唯一性。另外,调用其它类的方法,一种是通过new对象调用,另一种是类名.调用方法。显然,我们只能选择后者。
⑤为了保证能够通过类名.方法名,那么这个方法必须被static修饰,同时,getInstance()中的 类对象 这个实体也会因此而需要static修饰。
⑥这样,整个单例的思路就拿到了。就不会把static到底什么地方需要弄混,且单例设计的主体思想也熟记于心。

这是小小媛 在自学 过程中的总结,以上~
[胜利的钥匙,打开女王之路!]
回复 使用道具 举报
  1. class Single{
  2.        
  3.         private int num;
  4.        
  5.         public int getNum() {
  6.                 return num;
  7.         }

  8.         public void setNum(int num) {
  9.                 this.num = num;
  10.         }
  11.        
  12.         private Single(){}
  13.         public static Single s = new Single();
  14.         public static Single getInstance(){
  15.                 return s;
  16.         }
  17. }

  18. public class SingleDemo {
  19.         public static void main(String[] args) {
  20.                 Single s1 = Single.getInstance();
  21.                 Single s2 = Single.getInstance();
  22.                 s1.setNum(2);
  23.                 System.out.println(s2.getNum());
  24.         }
  25. }
复制代码
回复 使用道具 举报
恩恩,视屏看的不错
回复 使用道具 举报
学习了,,,
回复 使用道具 举报
学习学习!
回复 使用道具 举报
顶顶顶顶顶
回复 使用道具 举报
代码呢。
回复 使用道具 举报
杨基米德 来自手机 中级黑马 2015-7-13 07:31:36
12#
嗯嗯~这就是封装~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马