黑马程序员 学习笔记——Java 二十三设计模式之单例
2012-06-08 15:07
579 查看
----------------------android培训 、java培训、期待与您交流! ----------------------
Java 中解决某一问题最行之有效的方法是设计模式。在java 有二十三中设计模式。今天的笔记是二十三设计模式之 单例。
三个要点:一是某各类只能有一个对象实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例
单例设计模式解决在java中只存在一个对象。为了保证对象唯一,需要做到:
1 为避免其他程序过得的建立该类对象,先禁止其他程序建立该类对象。
2 为了其他程序可以访问该类对象,本类自定义一个对象。
3 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三步该如何用代码体现呢?
1将构造函数私有化
2在类中创建一个本类对象
3提供一个方法可以获取到该对象.
按上面的方法 举一个毕老师写的例子。
首相 建一个方法并私有化构造函数
class Single(){
private Single (){} //私有化构造函数
//第二步创建本类对象
private static single s=new Single();
//第三步 提供一个方法可以获取到该对象获取实例对象
public static Single getInstance(){
return s;
}
}
.//主函数调用:
class SingleDemo(){
public static void main (String[] args){
Single ss= Single.getInstance();
}
}
当然需要注意的是我们对事物该怎么描述时 还得怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上步骤加上就是。
当然上面这个方法是先初始化对象,又被称之为 “饿汉式”
还有种方法称为“懒汉式”是有等到被调用时 才进行初始化。也称作对象的延迟加载。
代码如下:
class Single(){
private static Single s=null;
private Single(){}
pbulic static Single(){
If(s==null){
S=new Single();
}
return s;
}
}
“饿汉式”特点:拿上面的single类说。Single类一进入内存,就已经创建好对象。
“懒汉式" 特点:single类进入内存,对象还没有存在。只有点用 getInstance时 才建立对象。
原则:定义单例时 一般用饿汉式。
补充些我在网络上找到关于 单例的 小知识。
例: 在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。
一个例子:Windows 回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。
----------------------android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
Java 中解决某一问题最行之有效的方法是设计模式。在java 有二十三中设计模式。今天的笔记是二十三设计模式之 单例。
三个要点:一是某各类只能有一个对象实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例
单例设计模式解决在java中只存在一个对象。为了保证对象唯一,需要做到:
1 为避免其他程序过得的建立该类对象,先禁止其他程序建立该类对象。
2 为了其他程序可以访问该类对象,本类自定义一个对象。
3 为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。
这三步该如何用代码体现呢?
1将构造函数私有化
2在类中创建一个本类对象
3提供一个方法可以获取到该对象.
按上面的方法 举一个毕老师写的例子。
首相 建一个方法并私有化构造函数
class Single(){
private Single (){} //私有化构造函数
//第二步创建本类对象
private static single s=new Single();
//第三步 提供一个方法可以获取到该对象获取实例对象
public static Single getInstance(){
return s;
}
}
.//主函数调用:
class SingleDemo(){
public static void main (String[] args){
Single ss= Single.getInstance();
}
}
当然需要注意的是我们对事物该怎么描述时 还得怎么描述。当需要将该事物的对象保证在内存中唯一时,就将以上步骤加上就是。
当然上面这个方法是先初始化对象,又被称之为 “饿汉式”
还有种方法称为“懒汉式”是有等到被调用时 才进行初始化。也称作对象的延迟加载。
代码如下:
class Single(){
private static Single s=null;
private Single(){}
pbulic static Single(){
If(s==null){
S=new Single();
}
return s;
}
}
“饿汉式”特点:拿上面的single类说。Single类一进入内存,就已经创建好对象。
“懒汉式" 特点:single类进入内存,对象还没有存在。只有点用 getInstance时 才建立对象。
原则:定义单例时 一般用饿汉式。
补充些我在网络上找到关于 单例的 小知识。
例: 在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。
一个例子:Windows 回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。
----------------------android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】
- 黑马程序员 JAVA学习笔记——java基础 单例设计模式
- 黑马程序员------java学习笔记之单例设计模式
- 黑马程序员 java学习笔记3-IO流之字节流与装饰设计模式
- 黑马程序员-Java学习笔记之设计模式(单例设计模式,装饰设计模式,模板设计模式)
- 黑马程序员——Java学习笔记之12——已接触的“设计模式”总结
- 黑马程序员_java基础学习笔记之单例设计模式
- java 设计模式学习笔记三 Builder模式
- 学习笔记:java设计模式--命令模式
- Java23种设计模式学习笔记【目录总贴】
- java/android 设计模式学习笔记(23)---解释器模式
- Java-学习笔记-设计模式-适配器
- 知了堂学习笔记--Java设计模式之适配器模式(转)
- 【知了堂学习笔记】_Java中设计模式之单例模式的学习
- 设计模式学习笔记--命令模式command pattern(Java版)
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件,动态增加观察者
- java 设计模式学习笔记十五 strategy 策略设计模式
- java 设计模式学习笔记九 decorator装饰模式
- Java-马士兵设计模式学习笔记-代理模式-动态代理 修改成可以任意修改代理逻辑
- java/android 设计模式学习笔记(19)---状态模式