黑马程序员——java基础—单例设计模式
来源:互联网 发布:2015年出境游数据 编辑:程序博客网 时间:2024/06/11 00:46
------- android培训、java培训、期待与您交流! ----------
单例设计模式
什么叫设计模式
设计模式指的是解决某一类问题行之有效的解决办法。
单例设计模式是用来解决什么问题的
单例模式可以保证一个类的对象唯一性。
比如多个程序都要使用同一个配置文件中的数据,且要实现数据共享和交换。必须要将数据封装到一个对象中,让不同的程序操作的是同一个对象。也就是说必须保证这个配置文件的对象唯一性。这个时候就是用单例。
单例设计模式的两种代码体现
饿汉式与懒汉式
1.饿汉式单例设计模式:这是先初始化对象,称为:饿汉式。 SingleDemo类一进内存,就已经创建好了对象。
<pre name="code" class="java"> //饿汉式单例设计模式 class SingleDemo { //初始化一个静态本类对象,对,是本类对象。且本类对象在类初始化的时候就被创建。 //可以理解成,饿汉很饿,要迫不及待的将本类对象吃到肚子里。 private static SingleDemo s = new SingleDemo(); //单例设计模式首先要有自己的私有,对,私有构造函数 private SingleDemo(){} public SingleDemo getString(){ return s; } }
2.懒汉式单例设计模式:该单例模式在被调用方法时,才初始化对象,也叫对象的延时加载。称为:懒汉式。
注意:缺点:如果当线程刚执行完If(s==null)语句,该线程失去执行权,而另一个线程也运行该代码,判断s时也为空,创建了一个对象,第一个线程在运行时就又创建一个对象,不能保证单例了。
这时我们想到了锁。
总结:即便懒汉式能确保只创建一个对象,但是耗时太多,不如饿汉式方便。
面试点: if(s==null)
{
Synchronized(SingleDemo2.class)
{
if(s==null)
s= new SingleDemo2()
}
}
<pre name="code" class="java"> //懒汉式单例设计模式 class SingleDemo2 { //初始化一个静态本类对象,对,是本类对象 private static SingleDemo2 s = null; //单例设计模式首先要有自己的私有,对,私有构造函数 private SingleDemo2(){} //懒汉式单例设计模式在被调用方法的时候才初始化对象,对,懒汉很懒,被调用的时候才初始化 public SingleDemo2 getString(){ if(s==null) s = new SingleDemo2(); return s; } }
单例设计模式的小测试:
//描述超人。 class SuperMan { private String name;//私有属性 private static SuperMan man = new SuperMan("克拉克");//初始化一个本类对象 private SuperMan(String name) { this.name = name; } public static SuperMan getInstance()//获取本类对象的方法 { return man; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void fly() { System.out.println(this.name +"..fly"); } } class SingleTest { public static void main(String[] args) { //超人对象应该是唯一的。保证superMan的唯一性。可使用单例模式解决。 // SuperMan man = new SuperMan("克拉克");//单例不能new对象,它的构造函数是私有的 //man1、man2分别获取SuperMan的对象,因为SuperMan使用的是单例设计模式,所以他们获得的对象是同一个 SuperMan man1 = SuperMan.getInstance(); SuperMan man2 = SuperMan.getInstance(); man1.setName("英雄");//单例设计模式可以实现数据的共享和交换 man2.fly();//输出:英雄...fly } }
0 0
- 黑马程序员——Java基础->单例设计模式
- 黑马程序员——java基础---单例设计模式
- 黑马程序员——Java基础---单例设计模式
- 黑马程序员 java基础—单例设计模式
- 黑马程序员—java基础学习--单例设计模式
- 黑马程序员 JAVA学习笔记——java基础 单例设计模式
- 黑马程序员——Java基础——单例设计模式
- 黑马程序员——java基础——单例设计模式
- 黑马程序员——Java基础——单例设计模式及扩展
- 黑马程序员——java基础—单例设计模式
- 黑马程序员——java基础—单例设计模式
- 黑马程序员——Java基础_单例设计模式、内部类
- 黑马程序员:java基础——单例设计模式,synchronized及面试常考内容
- 黑马程序员——Java基础---理解单例设计模式
- 黑马程序员——JAVA基础_02(static、单例设计模式)
- 黑马程序员——Java基础:static关键字、单例设计模式
- 黑马程序员——Java基础-- 单例模式
- 黑马程序员——Java基础---单例模式
- 第3章40题
- iOS Crash 分析(文二)-崩溃日志组成
- 鼠标事件-鼠标位置和鼠标滚轮
- TypeError: 'module' object is not callable 原因分析
- Tomcat
- 黑马程序员——java基础—单例设计模式
- iOS Crash 分析(文三)- 符号化崩溃日志
- android:descendantFocusability用法简析
- 开博文
- Android Network --------------关于Android自带的org.apache.http和apache官方的(第三方的)HttpClient的问题
- javascript 容易误解的地方
- ASP.NET FTP
- Win7中Maven3环境搭建及使用说明
- assembly note