程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> [MyBean-說明書]關於插件的單件模式(singleton),插件的共享模式,mybean-singleton

[MyBean-說明書]關於插件的單件模式(singleton),插件的共享模式,mybean-singleton

編輯:Delphi

[MyBean-說明書]關於插件的單件模式(singleton),插件的共享模式,mybean-singleton


【說明】

單件模式是一種用於確保整個應用程序中只有一個類實例。

想想我們的系統中有哪些方面可以應用到單件模式,比如大家常說的連接(ADOConnection)共享,其實就是指的單件模式。

 

 

 

【MyBean中的單件模式】

MyBean中插件一旦成為單件模式,框架就會幫你接管對象的生命周期。你每次調用getBean都只會產生一份實例,也就是說對象只會創建一次,不管是窗體插件還是無UI的邏輯插件。

MyBean中可以通過兩種方式使插件成為單件模式。

1.最簡單的一種是注冊的時候,參數選定為單件模式,也是最簡單明了的一種方式。

 

library diocp_bean;

uses
  SysUtils,
  Classes,
  mybean.core.beanFactory,
  uRemoteServerDIOCPImpl in '..\..\Service\uRemoteServerDIOCPImpl.pas';

{$R *.res}

begin
  beanFactory.RegisterBean('diocpRemoteSvr', TRemoteServerDIOCPImpl).Singleton := true;
end.

 

2.通過配置文件可以配置插件為單據模式:

假如上面的插件注冊的是普通的模式,而且這個插件你沒有源碼,你想直接使用,又想是單件模式怎麼辦?你可以使用配置文件達到

//  如果注冊是這樣的, beanFactory.RegisterBean('diocpRemoteSvr', TRemoteServerDIOCPImpl)
{
   list:
   [
      {
         "id":"dbSERVER",              //getBean的時候的參數
         "pluginID":"diocpRemoteSvr",  //如果與id一致可以進行忽略
         "lib":"diocp_bean.dll",       //宿主文件名
         "singleton":true,             //單件模式
         "config":
          {
              "host":"127.0.0.1",
              "port":9983
          }
      },
      {
         "id":"imSERVER",              //getBean的時候的參數
         "pluginID":"diocpRemoteSvr",  //如果與id一致可以進行忽略
         "lib":"diocp_bean.dll",       //宿主文件名
         "singleton":true,             //單件模式
         "config":
          {
              "host":"127.0.0.1",
              "port":9985
          }
      },
   ]
}

可以看出上面調用的時候可以完成2個插件,他們使用的實現都是一樣的,想想如果我們有兩個數據庫連接,一個連接業務數據庫,一個連接配置數據庫,其實他們的實現是一樣的,只是連接的地址和端口不一樣。

 

【單件模式的應用】

單件模式在MyBean可以引用比較廣泛,系統中只需要一個主窗體,有的選取窗體也只需要一個等等。。。大家可以想想你項目中的單件模式,之前是怎麼樣處理的


對於JAVA中的singleton模式

package test;

public class Singleton {
private Singleton s;
private Singleton()
{

}
public static Singleton getSigleton()
{
if(s==null)s=new Singleton();
return s;
}

}
這就是一個單例模式,我想應該不用注釋了,原理就是這個類的構造方法private了,所有在外邊不能調用,也就不能new Singleton();得到實例,那麼
想得到實例就得調用它的靜態方法getSigleton();即Singleton.getSigleton();就會返回一個Singleton的實例,注意此方法中的語句,即如果你是第一次調用這個方法那麼它會給你new一個實例,以後再調用得到的都是這個實例,也就是說從始至終就只有一個Singleton的實例,這就是單例模式。
 

怎用C++寫 單件模式 Singleton

class CAlone
{
public:
static CAlone &GetOne(void)
{
static CAlone aObj;
return aObj;
}
private:
CAlone(){};
};
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved