《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用全局变量)

示例:单件接口(使用全局变量)

说明:

1)、定义

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2)、结构

Singleton

定义一个Instance类操作,负责创建它自己的唯一实例。

客户只能通过Instance操作访问一个Singleton的实例。

3)、特点

让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法。这就是单件模式。

4)、效果

<1>、对唯一实例的受控访问

因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。

<2>、缩小名空间

Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。

 

代码:

unit uSingleton1;

 

interface

 

uses

    SysUtils, Dialogs;

 

type

    TSingleton = class(TObject)

    private

        FSingletonData: string;

        function GetSingletonData: string;

        procedure SetSingletonData(const Value: string);

    public

        constructor Create;   

        destructor Destroy; override;

        //---

        class function Instance: TSingleton;

        procedure SingletonOperation;

        //---

        property SingletonData: string read GetSingletonData write SetSingletonData;

    end;

 

implementation

 

var

    unigueInstance: TSingleton;

 

constructor TSingleton.Create;

begin

    if unigueInstance = nil then

        unigueInstance := Self

    else

        abort;

end;

 

destructor TSingleton.Destroy;

begin

    unigueInstance := nil;

    //---

    inherited;

end;

 

class function TSingleton.Instance: TSingleton;

begin

    if unigueInstance = nil then

        unigueInstance := TSingleton.Create;

    //---

    Result := unigueInstance;

end;

 

function TSingleton.GetSingletonData: string;

begin

    Result := FSingletonData;

end;

 

procedure TSingleton.SetSingletonData(const Value: string);

begin

    FSingletonData := Value;

end;

 

procedure TSingleton.SingletonOperation;

begin

    ShowMessage(FSingletonData);

end;

 

end.

 

procedure TForm1.Button5Click(Sender: TObject);

begin

    //---

    with TSingleton.Instance do

    begin

        SingletonData := '123';

        SingletonOperation;

    end;

    //---

    with TSingleton.Instance do

    begin

        SingletonData := '456';

        SingletonOperation;

    end;

    //---

    TSingleton.Instance.Free;

end;

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值