问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java单例模式怎么用?

发布网友 发布时间:2022-04-26 18:28

我来回答

6个回答

热心网友 时间:2022-04-09 19:23

java模式之单例模式:
单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
特点:
1,一个类只能有一个实例
2,自己创建这个实例
3,整个系统都要使用这个实例
例: 在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。一些资源管理器常常设计成单例模式。
外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。

一个例子:Windows 回收站。
在整个视窗系统中,回收站只能有一个实例,整个系统都使用这个惟一的实例,而且回收站自行提供自己的实例。因此,回收站是单例模式的应用。

两种形式:
1,饿汉式单例类
public class Singleton {

private Singleton(){}

//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用

private static Singleton instance = new Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}

热心网友 时间:2022-04-09 20:41

public class A{
//声明了一个私有的a对象
private A a=null;
//将其舒适化构造方法为私有的,外部无法实例化
private A(){}
//声明一个方法为public类型让外部访问 比如 A a=A.newinstance(); 这样来得到一个A的对象
public A newinstance()
{
//第一次为空就能得到对象并且返回出去,如果不为空则代码改对象已经被实例化过,则不与返回对象,
if(a==null)
{
return a;
}
]
}
希望能对你有帮助 呵呵。记得给好评哦。

热心网友 时间:2022-04-09 22:15

public class Singleton {
private static Singleton sin=new Singleton();
private Singleton(){

}
public static Singleton getInstance(){
return sin;
}
}
比如说Class、Runtime类都是单列设计模式。。

热心网友 时间:2022-04-10 00:07

类外想创建此类对象时只能产生一个对象,此类的构造方法为私有属性,可以有公有属性的的方法接口来返回本类的对象

热心网友 时间:2022-04-10 02:15

其实懒汉式的单例模式在高并发下可能会出现问题 个人觉得 public static final A a = new A(); private A(){};这种能好一些,不会有什么问题 性能和安全性都可以

热心网友 时间:2022-04-10 04:39

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
单例模式(singleton)顾名思义,就是只有一个实例。   
作为对象的创建模式[GOF95], 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。   单例模式的要点   显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。   一些资源管理器常常设计成单例模式。   在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。   需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放系统配置。这样的系统应当由一个对象来管理一个属性文件。   需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中管理,不可政出多头。   这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。   在java中,可以使用以下这种方式使用单例模式创建类的实例:   public class MyBean {   private static MyBean instance = null;   private MyBean(){   //do something   }   public static synchronized MyBean getInstance(){   if(instance == null){   instance = new MyBean();   }   return instance;   }   }   当一个类的实例可以有且只可以一个的时候就需要用到了。为什么只需要有一个呢?有人说是为了节约内存。本人对这个说法持保留态度。只有一个实例确实减少内存占用,可是我认为这不是使用单例模式的理由。我认为使用单例模式的时机是当实例存在多个会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?   Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。   一般Singleton模式通常有两种形式:   第一种形式: 也是常用的形式。   public class Singleton {   private static Singleton instance = null;   private Singleton(){   //do something   }   public static Singleton getInstance(){   if(instance==null){   instance = new Singleton();   }   return instance;   }   } //这个方法比下面的有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率   第二种形式:   public class Singleton {   //在自己内部定义自己的一个实例,只供内部调用   private static Singleton instance = new Singleton();   private Singleton(){   //do something   }   //这里提供了一个供外部访问本class的静态方法,可以直接访问   public static Singleton getInstance(){   return instance;   }   }   Flex中的单例模式   Flex中单例模式,常见的model层实例:   package models   {   import flash.events.EventDispatcher;   import mx.collections.ArrayCollection;   import vo.articlesVO;   import vo.linksVO;   [Bindable]   public class ModelLocator extends EventDispatcher   {   public static var _instance:ModelLocator;   public static function getInstance():ModelLocator{   if(_instance == null){   _instance = new ModelLocator();   }   return _instance;   }   public var total:int;   public var isLogin:Boolean = false;   public var articles:ArrayCollection;   public var selectedArticle:articlesVO;   public var categories:ArrayCollection;   public var links:ArrayCollection;   public var selectedLink:linksVO;   }   }   类中自己完成了自身的实例。。   <mx:Script>   <![CDATA[   import models.ModelLocator;   internal function initApp():void{   var instance:ModelLocator = ModelLocator.getInstance();   trace(instance.isLogin);//获得isLogin   }   ]]>   </mx:Script>   C#中的单例模式   #region 用法说明 //保证一个类仅有一个实例,并提供一个访问它的全局访问点   // 实现要点   // Singleton模式是*而不是改进类的创建。   // Singleton类中的实例构造器可以设置为Protected以允许子类派生。   // Singleton模式一般不要支持Icloneable接口,因为这可能导致多个对象实例,与Singleton模式的初衷违背。   // Singleton模式一般不要支持序列化,这也有可能导致多个对象实例,这也与Singleton模式的初衷违背。   // Singleton只考虑了对象创建的管理,没有考虑到销毁的管理,就支持垃圾回收的平台和对象的开销来讲,我们一般没必要对其销毁进行特殊的管理。   // 理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。   // 可以很简单的修改一个Singleton,使它有少数几个实例,这样做是允许的而且是有意义的。   //优点   // 实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例   // 灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程   //缺点   // 开销:虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题,上面的五种实现方式中已经说过了。   // 可能的开发混淆:使用 singleton 对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用 new 关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。   // 对象的生存期:Singleton 不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于 .NET Framework 的语言),只有 Singleton 类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除   //对象实例,但这样会导致 Singleton 类中出现悬浮引用。   //适用性   // 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。   // 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。   //应用场景   // 每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。   //(摘自吕震宇的C#设计模式(7)-Singleton Pattern)   // PC机中可能有几个串口,但只能有一个COM1口的实例。   // 系统中只能有一个窗口管理器。   // .NET Remoting中服务器激活对象中的Sigleton对象,确保所有的客户程序的请求都只有一个实例来处理。   #endregion   //regret4hxp add 2011-1-12   单例模式的实现要素:   至少在目前所有了解的语言中,静态变量(这是c/c++的叫法,其他语言或有不同)是实现单例模式的要素

参考资料:http://ke.baidu.com/view/1859857.htm

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
卡耐基的智慧大全集内容简介 会说话赢天下内容简介 卡耐基演讲与口才内容简介 商务口才训练内容简介 卡耐基金牌口才作者简介 卡耐基商务口才 作者简介 爱因斯坦的更多故事 杨柯叶谨言是什么电视 房贷和消费贷利率差别不大,但是还款金额差别挺大,都是怎么计算的... ...11月18号提现1500元、,11月25号还款1515,请问我还需要还 如何在Java中实现单例模式? JAVA 单例模式 懒汉式 如何防止多线程同时实例化 什么是Java单例模式啊? 请教各位大神,通常javaweb都是单例多线程的吗 java 中 单实例和多实例是指的什么? java中的单例模式涉及多线程问题: java,单例对象的方法可以被多个线程同时调用吗 java 单例模式这个要怎么理解? java中单例模式和多线程的实现? 昆虫记中最勤劳的昆虫是什么? 《昆虫记》中的“昆虫”指什麽啊? 昆虫记中昆虫的简介 关于《昆虫记》中描绘的昆虫的特点分析有哪些? 昆虫记中昆虫的生活和特点是什么? 读完昆虫记从作品中你了解的奥秘是什么? 急!!!昆虫记中各个昆虫的各个特点。网上的我看了,都不好,全一点 找一个表情美女扔胸罩那个谁有发一下 是要表情看好了啊 看到美女会有什么表情? 为什么男生普遍喜欢雏田而女生都讨厌她? 女人可以兴奋多少次 java中的单例模式的代码怎么写 java 单例模式?怎么写 java单例模式 微信附近人能看到别人,别人看不到自己是怎么回事?怎么解决? 一般手机用CPU几核才好? 我的鱼缸怎么老擦不干净 鱼缸内壁(无水区)非常不好擦干净,怎么办呢? 鱼缸擦不干净是怎么回事 为什么我的鱼缸壁弄不干净,灰蒙蒙的 怎样洗很脏的鱼缸 我要烧烤,要买点什么食材好。 演讲稿的特点有哪3个。 如何做好网络运营的工作? 演讲稿特点 演讲稿的特点(100字) 如何掌握网络运营小窍门? 演讲稿的结构特点是什么? 想做网络运营,有哪些必备的技能? 笔记本的A壳 B壳 C壳 D壳分别是什么? 如何掌握网络运营基本功?