B
billy_yuan
Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi 版
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
class function getNew():TObject ;
end;
var
Form1: TForm1;
a:TObject;
implementation
{$R *.DFM}
class function TForm1.getNew: TObject;
begin
if a <> nil then
a := TObject.Create ;
result := a ;
end;
end.
解释:
只有通过类方法的调用实现最终实现返回同一个实例,
TForm1.getNew() ;
如果通过实例的调用的话,那么肯定得到的不是同一个实例
Form1.getNew();这样调用非法!如果把getNew()定义为TFrom1里面的
一个方法的话,那么随着Form1的不同,getNew()返回的实例肯定不同。
------------------------------------------------------------------
Java 版
public class Singleton {
private static Singleton _instance = new Singleton();
public static Singleton getInstance() {
return _instance;
}
}
在JAVA中则实现更为简单,把_instance定义成为静态变量,然后初始化该静态变量
的实例,然后用静态方法getInstance()调用,这样得到的实例肯定是一样的。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
class function getNew():TObject ;
end;
var
Form1: TForm1;
a:TObject;
implementation
{$R *.DFM}
class function TForm1.getNew: TObject;
begin
if a <> nil then
a := TObject.Create ;
result := a ;
end;
end.
解释:
只有通过类方法的调用实现最终实现返回同一个实例,
TForm1.getNew() ;
如果通过实例的调用的话,那么肯定得到的不是同一个实例
Form1.getNew();这样调用非法!如果把getNew()定义为TFrom1里面的
一个方法的话,那么随着Form1的不同,getNew()返回的实例肯定不同。
------------------------------------------------------------------
Java 版
public class Singleton {
private static Singleton _instance = new Singleton();
public static Singleton getInstance() {
return _instance;
}
}
在JAVA中则实现更为简单,把_instance定义成为静态变量,然后初始化该静态变量
的实例,然后用静态方法getInstance()调用,这样得到的实例肯定是一样的。