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