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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

了解设计模式
设计模式:解决某一类问题行之有效的解决办法(思想)
软件行业里有23种经典的设计模式。
单例(Singleton)设计模式:
学习设计模式必须先弄清楚它是解决什么问题的。
单例是解决什么问题的呢?
可以保证一个类的对象唯一性。
场景:比如多个程序都要使用一个配置文件中的数据,而且要实现数据共享和交换。必须要将多个数据封装到一个对象中。而且多个程序操作的是同一个对象。那也就是说必须保证这个配置文件对象的唯一性。
单例模式的代码体现
怎么能保证对象的唯一性呢?
1,一个类只要提供了构造函数,就可以产生多个对象。完全无法保证唯一。既然数量不可控,干脆,不让其他程序建立对象。
2,不让其他程序创建,对象何在?干脆,自己在本类中创建一个对象,这样好处是可控
3,创建完成后,要给其他程序提供访问的方式。
如何不其他程序创建对象呢?
              1,私有化构造函数,不让其他程序创建的对象初始化。
2,在本类中new一个本类对象。作为成员存在。
3,定义一个功能,其他程序可以通过这个功能获取到本类的对象。

注意:一般获取对象的方法约定俗成用:getInstanceinstance就是实例的意思。
注意:静态static是成员修饰符,只能修饰成员。
【问题】:本例中   static Single s =newSingle(); 如何理解?
个人理解是:其实static Single s=new Single();正确的理解是,创建了一个类类型静态成员,就好比如说是 static int x=5;一样的道理,这里的s作为Single类类型的变量存在,同样可以被static修饰。s实际上就是一个地址值而已,指向了对象所在的内存位置。
凡是在类中定义的,都是类的成员,不只包括成员变量和成员方法,还有其他。static Single s =newSingle()是在类中定义的,所以也是类的成员,只不过是将本类实例化的对象作为了本类的成员存在,所以可以被static修饰。
【问题】内存……如何解释?
个人理解:

s的产生,是通过new一个对象来完成的,但是Single类中,都是静态的成员,所以在堆中是开辟空间以后,是空的。而s产生以后,会成为了一个代表着16进制地址值的变量,所以,s作为类类型的变量,其实本质就是一个16进制的内存地址值,static Single s=new Single();作为类的成员,实际上相当于一个静态成员变量,在内存中存储于方法区的静态代码区。


3 个回复

倒序浏览
新手求大神发代码
回复 使用道具 举报
大神啊,真是一片好帖
回复 使用道具 举报
顶大神一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马