黑马程序员技术交流社区
标题:
单例的设计模式
[打印本页]
作者:
逆袭白富美
时间:
2015-7-12 21:33
标题:
单例的设计模式
设计模式:解决某一类问题行之有效的解决办法(思想)。
单例(Singleton)设计模式:
学习设计模式必须先弄清楚它是解决什么问题的。
单例是解决什么问题的呢?
可以保证一个类的对象唯一性。
场景:比如多个程序都要使用一个配置文件中的数据,而且要实现数据共享和交换。
必须要将多个数据封装到一个对象中。而且多个程序操作的是同一个对象。
那也就是说必须保证这个配置文件对象的唯一性。
怎么能保证对象的唯一性呢?
1,一个类只要提供了构造函数,就可以产生多个对象。
完全无法保证唯一。
既然数量不可控,干脆,不让其他程序建立对象。
2,不让其他程序创建,对象何在?
干脆,自己在本类中创建一个对象,这样好处是什么,可控。
3,创建完成后,是不是要给其他程序提供访问的方式。
怎么实现这个步骤呢?
1,怎么就能不其他程序创建对象呢?
直接私有化构造函数,不让其他程序创建的对象初始化。
2,直接在本类中new一个本类对象。
3,定义一个功能,其他程序可以通过这个功能获取到本类的对象。
作者:
MAY1066
时间:
2015-7-12 22:11
我们马上就要学习这里的东西了,很有帮助
作者:
453203489
时间:
2015-7-12 22:38
要是加上代码的实现就更好叻。
作者:
叫什么
时间:
2015-7-12 22:47
还没有学到 提前看看
作者:
一枚小小媛
时间:
2015-7-12 22:55
本帖最后由 一枚小小媛 于 2015-7-12 23:00 编辑
单例除了主体思想“保证对象唯一性之外”,还有就是可以通过理解性的去编写这个类,就能更易如反掌。
①思路是:“单例”,首先把无参构造函数私有化。这样在new 对象的时候,就不能再使用它了。
②声明一个私有的 本类对象,并且new出来。
③对外提供一个方法,可以获取这个类对象。比如getInstance()。方法体的内容就是获取这个对象。
④既然无参构造函数已经被私有化,我们无法直接获取对象,而必须要调用上面提到的getInstance()方法,获取事先定义(又分支为两种 1、饿汉式 2、懒汉式)好的类对象,保证了每次调用方法获取对象,都是唯一性。另外,调用其它类的方法,一种是通过new对象调用,另一种是类名.调用方法。显然,我们只能选择后者。
⑤为了保证能够通过类名.方法名,那么这个方法必须被static修饰,同时,getInstance()中的 类对象 这个实体也会因此而需要static修饰。
⑥这样,整个单例的思路就拿到了。就不会把static到底什么地方需要弄混,且单例设计的主体思想也熟记于心。
这是小小媛 在自学 过程中的总结,以上~
[胜利的钥匙,打开女王之路!]
作者:
qihuan
时间:
2015-7-12 23:13
class Single{
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
private Single(){}
public static Single s = new Single();
public static Single getInstance(){
return s;
}
}
public class SingleDemo {
public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
s1.setNum(2);
System.out.println(s2.getNum());
}
}
复制代码
作者:
为明天而奋斗
时间:
2015-7-12 23:33
恩恩,视屏看的不错
作者:
康恒强
时间:
2015-7-12 23:41
学习了,,,
作者:
825176857
时间:
2015-7-12 23:50
学习学习!
作者:
小囧
时间:
2015-7-12 23:51
顶顶顶顶顶
作者:
夜写意
时间:
2015-7-13 00:30
代码呢。
作者:
杨基米德
时间:
2015-7-13 07:31
嗯嗯~这就是封装~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2