设计模式学习总结之二
三:Singleton模式(单实例模式)
顾名思义,即单例模式。其主要思想就是在项目中,仅创建一个实例对象。该对象的抽象,除了通过指定的获取实例接口外,再没其他办法可以初始化。
此可以保证整个系统生命周期内,仅会有一个实例存在。可以想象一下,它是可以与先前说的工厂模式或抽象工厂模式结合使用的。因为一般来说,工厂可能只会
有一个(至少对某种逻辑处理来说是这样的)。
在C++中,实现单例模式,相对比较直观及合理。将该实例定义成static成员即可。并提供获取及释放该成员的接口。而在delphi中,(就本来的了解来说)
似乎并没有直观的静态成员这一说法。但可以定义一个全局变量,并提供获取与释放变量的接口来模拟。(但,毕竟没办法同类型的实例被创建出来,所以最好要加
详细注释说明。告知其他组员,此为单实例)
参考的c++实现:
class CA
{
private:
CA(){}
private:
static CA* m_pAObj;
public:
virtual ~CA(){}
static CA* GetAObj(void)
{
if (m_pAObj == NULL)
m_pAObj = new CA();
return m_pAObj;
}
static void SafeReleaseAObj(void)
{
if (m_pAObj != NULL)
delete m_pAObj;
m_pAObj = NULL;
}
};
static CA* CA::m_pAObj = NULL;
参考的Delphi实现:
unit xxx
interface
uses
xxx,...,yyy;
type
TMyClass = class
//xxxx
end;
var
gAObj: TMyClass;//此为全局的单实例对象。
function GetAObj: TMyClass;
procedure SafeReleaseAObj;
implemention//这个单词忘了是不是这么写。反应是实现的那个单词。。
procedure SafeReleaseAObj;
begin
if Assigned(gAObj) then
FreeAndNil(gAObj);
end;
funciton GetAObj: TMyClass;
begin
if not Assigned(gAObj) then
gAObj = TMyClass.Create;
Result := gAObj;
end;
//说明:以上仅是临时写的,并未在程序中编译测试。但思路肯定不会错。可供参考用。
四:Builder模式(即:构建模式)
往往在实际项目的开发过程中会发现,某些模块的功能过于复杂。此时,我们自然就会想到将其进行进一步的划分。如:细分成DA,DB,...,DN。然后由该模块的某个管理角色进行协调运作。
这样,Builder模式将可用在此设计上。其思想,就是将复杂问题进一步细化。