本文主要是介绍谈谈singelton单例模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
单例模式是一种常用设计模式。该类只有一个实例,而且该类自行创建实例。
很多时候,服务器都只需要一个全局对象,这样方便协调系统的整体行为。比如系统的配置文件,系统只需要一个单例对象读取加载,其他对象只需要通过该单例对象获取配置信息。这样方便在复杂模式下对系统配置的管理。
java中常用单例模式:
- public class Singleton(){
- private final static Singleton INSTANCE=new Singleton();
- private Singleton(){}
- //公开的,静态工厂方法
- public static Singleton getSingleton(){
- return INSTANCE;
- }
- }
- public class Singleton(){
- private final static Singleton INSTANCE=new Singleton();
- private Singleton(){}
- //公开的,静态工厂方法
- public static Singleton getSingleton(){
- return INSTANCE;
- }
- }
public class Singleton(){private final static Singleton INSTANCE=new Singleton();private Singleton(){}//公开的,静态工厂方法public static Singleton getSingleton(){return INSTANCE;}
}
这种方法,在类自身被加载是INSTANCE就已经实例化了,会提前占用资源。
另一种常用模式:
- public class Singleton(){
- private final static Singleton INSTANCE=null;
- private Singleton(){}
- //公开的,静态工厂方法
- public static Singleton getSingleton(){
- if(null==INSTANCE){
- synchronized(Singleton.class){
- INSTANCE=new Singleton();
- }
- }
- return INSTANCE;
- }
- }
- public class Singleton(){
- private final static Singleton INSTANCE=null;
- private Singleton(){}
- //公开的,静态工厂方法
- public static Singleton getSingleton(){
- if(null==INSTANCE){
- synchronized(Singleton.class){
- INSTANCE=new Singleton();
- }
- }
- return INSTANCE;
- }
- }
public class Singleton(){private final static Singleton INSTANCE=null;private Singleton(){}//公开的,静态工厂方法public static Singleton getSingleton(){if(null==INSTANCE){synchronized(Singleton.class){INSTANCE=new Singleton();}}return INSTANCE;}
}
这里需要加上线程锁,来避免生成多个实例。
singleton还有其他实现形式,在这里就不一一例举了。
delphi 单例模式
unit Singleton;
(*单例模式适用于辅助类, 一般伴随于单元的生命周期
*)
interface
uses SysUtils;typeTSingleton = classpublicclass function NewInstance : TObject; override;class function GetInstance : TSingleton;destructor Destroy; override;procedure FreeInstance; override;function Address : integer;end;implementation
varFSingleton : TSingleton = nil;FCanFree : Boolean;{ TSingleton }
function TSingleton.Address: integer;
beginResult := Integer(Self);
end;destructor TSingleton.Destroy;
begininherited;
end;procedure TSingleton.FreeInstance;
beginif not FCanFree then Exit;inherited FreeInstance;FSingleton := nil;
end;class function TSingleton.GetInstance: TSingleton;
beginif not Assigned(FSingleton) thenbeginFSingleton := TSingleton.Create;end;Result := FSingleton;
end;class function TSingleton.NewInstance: TObject;
beginif not Assigned(FSingleton) thenbeginFSingleton := TSingleton(inherited NewInstance);end;Result := FSingleton;
end;initializationFSingleton := TSingleton.Create;finalizationFCanFree := True;if Assigned(FSingleton) thenbeginFSingleton.Free;FSingleton := nil;end;end.uses Singleton;procedure TForm1.btn1Click(Sender: TObject);
varvTest, vTest2 : TSingleton;
beginvTest := TSingleton.Create;ShowMessage(IntToStr(vTest.Address));vTest2 := TSingleton.Create;ShowMessage(IntToStr(vTest2.Address));// vTest.free;FreeAndNil(vTest);vTest2.free;
end;
这篇关于谈谈singelton单例模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!