《GOF设计模式》—单件(Singleton)—Delphi源码示例:创建Singleton类的子类(使用环境变量)
2010-10-30 16:11
645 查看
示例:创建Singleton类的子类(使用环境变量)
说明:
Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
创建Singleton类的子类主要问题与其说是定义子类不如说是建立它的唯一实例,这样客户就可以使用它。事实上,指向单件实例的变量必须用子类的实例进行初始化。最简单的技术是在Singleton的Instance操作中决定你想使用的是哪一个单件,如用环境变量来具体实现。
代码:
unit uSingleton3;
interface
uses
SysUtils, Dialogs,IniFiles;
type
TSingleton = class
private
class var
FInstance: TSingleton;
public
constructor Create;
destructor Destroy; override;
//---
class function Instance: TSingleton;virtual;
procedure Operate;virtual;
end;
TSingletonA = class(TSingleton)
public
procedure Operate; override;
end;
TSingletonB = class(TSingleton)
public
procedure Operate; override;
end;
implementation
constructor TSingleton.Create;
begin
if FInstance = nil then
FInstance := Self
else
abort;
end;
destructor TSingleton.Destroy;
begin
FInstance := nil;
//---
inherited;
end;
class function TSingleton.Instance: TSingleton;
//---
function _GetType:string;
var
AFile: TIniFile;
begin
try
AFile := TIniFile.Create('Config.ini');
Result := AFile.ReadString('Singleton','Kind','SingletonA');
AFile.Free;
except
Result := 'SingletonA';
end;
end;
var
AType:string;
begin
if FInstance = nil then
begin
AType := _GetType;
if AType = 'SingletonA' then
FInstance := TSingletonA.Create
else if AType = 'SingletonB' then
FInstance := TSingletonB.Create
else
FInstance := TSingleton.Create;
end;
//---
Result := FInstance;
end;
procedure TSingleton.Operate;
begin
ShowMessage('Singleton');
end;
procedure TSingletonA.Operate;
begin
ShowMessage('SingletonA');
end;
procedure TSingletonB.Operate;
begin
ShowMessage('SingletonB');
end;
end.
procedure TForm1.Button5Click(Sender: TObject);
begin
TSingleton.Instance.Operate;
TSingleton.Instance.Free;
end;
说明:
Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
创建Singleton类的子类主要问题与其说是定义子类不如说是建立它的唯一实例,这样客户就可以使用它。事实上,指向单件实例的变量必须用子类的实例进行初始化。最简单的技术是在Singleton的Instance操作中决定你想使用的是哪一个单件,如用环境变量来具体实现。
代码:
unit uSingleton3;
interface
uses
SysUtils, Dialogs,IniFiles;
type
TSingleton = class
private
class var
FInstance: TSingleton;
public
constructor Create;
destructor Destroy; override;
//---
class function Instance: TSingleton;virtual;
procedure Operate;virtual;
end;
TSingletonA = class(TSingleton)
public
procedure Operate; override;
end;
TSingletonB = class(TSingleton)
public
procedure Operate; override;
end;
implementation
constructor TSingleton.Create;
begin
if FInstance = nil then
FInstance := Self
else
abort;
end;
destructor TSingleton.Destroy;
begin
FInstance := nil;
//---
inherited;
end;
class function TSingleton.Instance: TSingleton;
//---
function _GetType:string;
var
AFile: TIniFile;
begin
try
AFile := TIniFile.Create('Config.ini');
Result := AFile.ReadString('Singleton','Kind','SingletonA');
AFile.Free;
except
Result := 'SingletonA';
end;
end;
var
AType:string;
begin
if FInstance = nil then
begin
AType := _GetType;
if AType = 'SingletonA' then
FInstance := TSingletonA.Create
else if AType = 'SingletonB' then
FInstance := TSingletonB.Create
else
FInstance := TSingleton.Create;
end;
//---
Result := FInstance;
end;
procedure TSingleton.Operate;
begin
ShowMessage('Singleton');
end;
procedure TSingletonA.Operate;
begin
ShowMessage('SingletonA');
end;
procedure TSingletonB.Operate;
begin
ShowMessage('SingletonB');
end;
end.
procedure TForm1.Button5Click(Sender: TObject);
begin
TSingleton.Instance.Operate;
TSingleton.Instance.Free;
end;
相关文章推荐
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:创建Singleton类的子类(使用注册表)
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:创建Singleton类的子类(重载Instance方法)
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用全局变量)
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用类字段)
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:基于单件的迷宫
- 《GOF设计模式》—命令(COMMAND)—Delphi源码示例:参数化机制(使用命令模式)
- 《GOF设计模式》—代理(PROXY)—Delphi源码示例:文档编辑器(使用虚代理实现)
- 《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:使用双向适配器提供透明操作
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用处理函数)
- 《GOF设计模式》—代理(PROXY)—Delphi源码示例:文档编辑器(使用doesNotUnderstand的Proxy)
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用请求对象)
- 《GOF设计模式》—中介者 (MEDIATOR)—Delphi源码示例:Colleague—Mediator通信(使用观察者模式)
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:创建正确的Implementor对象(参数)
- 《GOF设计模式》—组合(COMPOSITE)—Delphi源码示例:使用高速缓冲存贮改善性能
- 《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:可插入的Adapter(使用抽象操作)
- 《GOF设计模式》—原型(Prototype)—Delphi源码示例:基于类的原型管理器(使用TList实现)
- 《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:可插入的Adapter(使用代理对象)
- 《GOF设计模式》—原型(Prototype)—Delphi源码示例:基于类的原型管理器(使用TStringList实现)
- 《GOF设计模式》—原型(Prototype)—Delphi源码示例:基于类的原型管理器(使用TList和TObject对象服务实现)
- 《GOF设计模式》—迭代器 (ITERATOR)—Delphi源码示例:内部迭代器(使用函数指针)