单例模式(java 实现 Singleton)(一)
2015-07-28 21:58
489 查看
网上有很多单例模式的代码,之前也只是草草的知道单例模式怎么写,大概的用途。
今天看书《Java开发实战经典》的时候又看到了单例模式,根据自己的理解说明一下单例模式的实现步骤(过程):
1. ——>对构造方法的封装( private 类名() )
通过私有化构造方法,外部不可调用构造方法生成本类对象。(所以下一步要解决如何生成本类对象?)
2. ——>在类内部生成本类对象
虽然生成了本类对象,但如何把对象传递给外部使用呢?而外部又不能生成本类的实例获得,所以只能通过把想调用的成员变成类成员,然后通过类名称来直接调用。所以下一步就是将内部生成的对象变成类成员。
3. ——>添加static关键字使内部对象变成类成员
但是类中的属性必须封装,所以下一步要封装此内部对象。
4. ——>对类成员对象进行封装(private),不允许直接访问类属性
到了这里,就很容易想到下一步应该是生成返回封装属性的方法了,不过因为此处的属性(内部生成的对象)是静态属性(类属性),所以获得这个属性的方法也要是静态方法(可以使用类名直接调用的类方法)。
5. ——>生成返回封装后的静态成员对象的静态方法
即:无论程序怎样运行,Singleton类永远只会有一个实例化对象存在。
PS: 只要将构造方法私有化,就可以控制实例化对象的产生。(核心)
今天看书《Java开发实战经典》的时候又看到了单例模式,根据自己的理解说明一下单例模式的实现步骤(过程):
1. ——>对构造方法的封装( private 类名() )
class Singleton{ private Singleton() { //对构造方法的封装 } public void sayHello(){ //普通方法 System.out.println("Hello, Singleton"); } }
通过私有化构造方法,外部不可调用构造方法生成本类对象。(所以下一步要解决如何生成本类对象?)
2. ——>在类内部生成本类对象
class Singleton{ Singleton instance = new Singleton(); //在内部生成本类对象 private Singleton() { } public void sayHello(){ System.out.println("Hello, Singleton"); } }
虽然生成了本类对象,但如何把对象传递给外部使用呢?而外部又不能生成本类的实例获得,所以只能通过把想调用的成员变成类成员,然后通过类名称来直接调用。所以下一步就是将内部生成的对象变成类成员。
3. ——>添加static关键字使内部对象变成类成员
class Singleton static Singleton instance = new Singleton(); //将内部对象变成类成员 private Singleton() { } public void sayHello(){ System.out.println("Hello, Singleton"); } }
但是类中的属性必须封装,所以下一步要封装此内部对象。
4. ——>对类成员对象进行封装(private),不允许直接访问类属性
class Singleton private static Singleton instance = new Singleton(); //对类成员对象进行封装 private Singleton() { } public void sayHello(){ System.out.println("Hello, Singleton"); } }
到了这里,就很容易想到下一步应该是生成返回封装属性的方法了,不过因为此处的属性(内部生成的对象)是静态属性(类属性),所以获得这个属性的方法也要是静态方法(可以使用类名直接调用的类方法)。
5. ——>生成返回封装后的静态成员对象的静态方法
class Singleton private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance(){ //用来获得静态属性的静态方法 return instance; } public void sayHello(){ System.out.println("Hello, Singleton"); } }到此一个完整的单例模式就完成了,可以被类名直接调用获得此类对象(e.g. Singleton s1 = Singleton.getInstance() )
即:无论程序怎样运行,Singleton类永远只会有一个实例化对象存在。
PS: 只要将构造方法私有化,就可以控制实例化对象的产生。(核心)
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统