积木

No sub title

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

设计模式学习总结之二

三: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模式将可用在此设计上。其思想,就是将复杂问题进一步细化。

posted on 2011-05-15 15:31 Jacc.Kim 阅读(279) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理