singleton之我见

最爱宝贝110

最爱宝贝110

2016-02-19 18:23

有了下面这个singleton之我见教程,不懂singleton之我见的也能装懂了,赶紧get起来装逼一下吧!
 

先和大家说说什么是singleton模式的,它中文意应该为单一模式,但好别扭,也不知道是谁翻译的
  29796428(qiubole) 12:26:46
  它属于创建模式的一种
  29796428(qiubole) 12:27:00
  主要的作用就是确实一个类有且只有唯一的一个实例
  29796428(qiubole) 12:27:10
  这在实际当中,其实还是有一些用处的
  29796428(qiubole) 12:27:41
  比如,当前用户这个类,我们就应该只保证其只有一份
  29796428(qiubole) 12:27:57
  一般我们在写程序的时候,经常会为某一个类,或某一个窗体定义一个全局变量
  29796428(qiubole) 12:28:06
  但有了这个变局变量会带来很多的问题
  29796428(qiubole) 12:28:28
  一是,无法使用方便的命名空间(这在DELPHI中是没有的,没这概念)
  29796428(qiubole) 12:28:39
  二是,无法控制它的多次创建
  29796428(qiubole) 12:28:53
  利用singleton模式就能很好的解决这个问题
  29796428(qiubole) 12:29:11
  我们都知道,在delphi中,只有类方法,而没有类变量
  29796428(qiubole) 12:29:25
  所谓的类方法,就是其它如c++或java叫的静态方法
  29796428(qiubole) 12:29:35
  delphi采用的是smalltalk的叫法,称之为类方法
  29796428(qiubole) 12:29:45
  它的基本表现形式是 class procedure, class function
  29796428(qiubole) 12:30:00
  如果大家看过TObject这个对象的源码的话,就应该比较了解
  29796428(qiubole) 12:30:14
  诸如InitInstance, InstanceSize等
  29796428(qiubole) 12:30:35
  但delphi有一点,也是最让人不爽的一点,它只提供类方法,不提供静态属性,就是static变量
  29796428(qiubole) 12:31:00
  那么,我们就只好通过一种折 (这字不会打,妈的)的办法
  29796428(qiubole) 12:31:23
  c#里这样实现
   private static int i;
  29796428(qiubole) 12:31:40
  delphi没办法,只好把它放到implementation下面
  29796428(qiubole) 12:31:56
  这里的变量,只有当前单元的类的能访问
  29796428(qiubole) 12:32:11
  很好了,我们要的就是它,把它当成static吧
  29796428(qiubole) 12:32:48
  singleton的目的是控制上面说的两点,它又是如何做到的呢
  29796428(qiubole) 12:33:07
  其实,很简单,还是要通过class function 来入手
  29796428(qiubole) 12:33:29
  当任何使用这个对象的时候,都必须通过某一个静态方法(类方法)来访问所要的对象的实例
  29796428(qiubole) 12:33:42
  我们只要提供如下方法,一切就OK了
  29796428(qiubole) 12:34:11
  type
    TKillAll = class
      class function Instance: TKillAll;
    end;
  29796428(qiubole) 12:35:06
  implementation
  var
    locKillAll: TKillAll;
  class function TKillAll.Instance: TKillAll;
  begin
    if locKillAll = nil then
      locKillAll := TKillAll.Create;
    result := locKillAll;
  end;
  29796428(qiubole) 12:35:16
  ok,就是这么简单了,明白了没有????  
  同时,一定要防止用户直接调用create,设置一个局部变量,如果是由Instance 调用的Create,就允许创建,否则,就抛出异常

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

singleton之我见

编程语言 网络编程
singleton之我见

婴儿湿疹之我见

婴儿
婴儿湿疹之我见

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Delphi实现Singleton模式

编程语言 网络编程
Delphi实现Singleton模式

设计模式之singleton

编程语言 网络编程
设计模式之singleton

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Spring Singleton的陷阱

编程语言 网络编程
Spring Singleton的陷阱

Singleton深入浅出

电脑网络
Singleton深入浅出

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win10系统怎么关闭自动更新

Win10系统怎么关闭自动更新

Delphi,编译文件(第12页)

Delphi,编译文件(第12页)
下拉加载更多内容 ↓