中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

.NET c# 單體模式(Singleton)

單體模式(Singleton)是經(jīng)常為了保證應(yīng)用程序操作某一全局對(duì)象,讓其保持一致而產(chǎn)生的對(duì)象,例如對(duì)文件的讀寫操作的鎖定,數(shù)據(jù)庫操作的時(shí)候的事務(wù)回滾,還有任務(wù)管理器操作,都是一單體模式讀取的。
  創(chuàng)建一個(gè)單體模式類,必須符合三個(gè)條件:
  1:私有構(gòu)造函數(shù)(防止其他對(duì)象創(chuàng)建實(shí)例);
  2:一個(gè)單體類型的私有變量;
  3:靜態(tài)全局獲取接口

  下面我寫一個(gè)類,為了看是不是單體,就加了一個(gè)計(jì)數(shù)器,如果是同一個(gè)類,那么這個(gè)類的計(jì)數(shù)每次調(diào)用以后就應(yīng)該自動(dòng)加一,而不是重新建對(duì)象歸零:

  .NET c# 單體模式 

using System;
using System.Threading;
public class Singleton{ 
    private int ObjCount=0;
    private Singleton(){
        Console.WriteLine("創(chuàng)建對(duì)象");
    }
    private static Singleton objInstance = null;
    public static  Singleton getInstance() {
        if (objInstance==null) objInstance=new Singleton();

        return objInstance;
    }
    public void ShowCount(){
        ObjCount++;
        Console.WriteLine("單個(gè)對(duì)象被調(diào)用了{(lán)0}次",ObjCount);
    }
};


 然后我們來測(cè)試一下:
public class ConsoleTest{
    public static void Main(string[] args){
        Console.WriteLine("開始執(zhí)行單體模式"); 
        for(int i=0;i<5;i++){
            Singleton.getInstance().ShowCount();
        }

        Console.ReadLine();
    }
};


我在這個(gè)Main里面執(zhí)行了5次,看看輸出的結(jié)果:
開始執(zhí)行單體模式
創(chuàng)建對(duì)象
單個(gè)對(duì)象被調(diào)用了1次
單個(gè)對(duì)象被調(diào)用了2次
單個(gè)對(duì)象被調(diào)用了3次
單個(gè)對(duì)象被調(diào)用了4次
單個(gè)對(duì)象被調(diào)用了5次
  在這里可以看出,每次都是使用的同一個(gè)對(duì)象,實(shí)現(xiàn)了單體。
  為了測(cè)試在多線程下面是否是單體,下面我寫了一個(gè)多線程測(cè)試的:
class ApartmentTest
{
    public static void RunMoreThread()
    {
        Thread newThread =  new Thread(new ThreadStart(ThreadSingleMethod));
        newThread.SetApartmentState(ApartmentState.MTA);
        Console.WriteLine("ThreadState: {0}, ApartmentState: {1},ManagedThreadId:{2}", newThread.ThreadState, newThread.GetApartmentState(),newThread.ManagedThreadId );
        newThread.Start();
    }

   public static void ThreadSingleMethod() {
        Singleton.getInstance().ShowCount();
    }
};


然后每次for循環(huán)執(zhí)行ApartmentTest.RunMoreThread();
再看看輸出的結(jié)果:開始執(zhí)行單體模式
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:3
創(chuàng)建對(duì)象
單個(gè)對(duì)象被調(diào)用了1次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:4
單個(gè)對(duì)象被調(diào)用了2次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:5
單個(gè)對(duì)象被調(diào)用了3次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:6
單個(gè)對(duì)象被調(diào)用了4次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:7
單個(gè)對(duì)象被調(diào)用了5次

根據(jù)ManagedThreadId,可以看出不同的線路訪問達(dá)到了單體,OK!

c#的單體模式介紹完畢;

下面是php 單體模式的代碼:
<?php

header("Content-Type: text/html; charset=utf-8");

class Singleton{ 
    private $ObjCount=0;
    private function __construct(){
        echo("創(chuàng)建對(duì)象<hr/>");
    }

    public static  function   getInstance() {
        static $objInstance = null;        
                  if ( $objInstance == null )
          $objInstance =  new Singleton();
        return $objInstance;

    }
    public function ShowCount(){
        $this->ObjCount++;
        echo("單個(gè)對(duì)象被調(diào)用了".$this->ObjCount.'次數(shù)<hr/>');
    }


};


for($i=0;$i<5;$i++)
    Singleton::getInstance()->ShowCount();
?>

請(qǐng)注意以上php代碼的私有靜態(tài)變量范圍,不要放在類主體。
執(zhí)行結(jié)果:
創(chuàng)建對(duì)象
--------------------------------------------------------------------------------
單個(gè)對(duì)象被調(diào)用了1次數(shù)
--------------------------------------------------------------------------------
單個(gè)對(duì)象被調(diào)用了2次數(shù)
--------------------------------------------------------------------------------
單個(gè)對(duì)象被調(diào)用了3次數(shù)
--------------------------------------------------------------------------------
單個(gè)對(duì)象被調(diào)用了4次數(shù)
--------------------------------------------------------------------------------
單個(gè)對(duì)象被調(diào)用了5次數(shù)

下面我們?cè)賮砜纯?a href=/itjie/Javajishu/ target=_blank class=infotextkey>Java版本的寫法:

單體模式 Java
class Singleton{ 
    private int ObjCount=0;
    private Singleton(){
        System.out.println("創(chuàng)建對(duì)象");
    }
    private static Singleton objInstance = null;
    public static  Singleton getInstance() {
        if (objInstance==null) objInstance=new Singleton();

        return objInstance;
    }
    public void ShowCount(){
        ObjCount++;
        System.out.println("單個(gè)對(duì)象被調(diào)用了"+ ObjCount +"次");
    }
};
class ConsoleTestSingleton{
    public static void main(String args[]){
        System.out.println("開始執(zhí)行單體模式"); 
        for(int i=0;i<5;i++){
            Singleton.getInstance().ShowCount();
        }
    }
};
基本代碼與c#一致,執(zhí)行結(jié)果:
開始執(zhí)行單體模式
創(chuàng)建對(duì)象
單個(gè)對(duì)象被調(diào)用了1次
單個(gè)對(duì)象被調(diào)用了2次
單個(gè)對(duì)象被調(diào)用了3次
單個(gè)對(duì)象被調(diào)用了4次
單個(gè)對(duì)象被調(diào)用了5次

可以看出,也是完全的單體,只要記住開頭提到的三點(diǎn),即可掌握該模式。
----------
1:今天L出差
2:昨天聚會(huì),比較Happy
3:SL和Z都是手機(jī)Q網(wǎng)
4:無事之冬

AspNet技術(shù).NET c# 單體模式(Singleton),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 奇米超碰 | 日本 欧美 国产 | 亚洲福利一区二区 | 国产成人在线视频免费观看 | 国产一区亚洲 | 亚洲一区视频在线 | 一区二区三区四区不卡视频 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 久久免费看 | 亚洲免费在线观看 | 91精品久久久久久久久久小网站 | 97视频久久 | 久久久久久黄 | 亚洲日本欧美日韩高观看 | 中文字幕在线免费观看 | 黄色片免费 | 日韩播放 | 久久99精品国产麻豆婷婷 | 国产日韩欧美在线观看 | 国产精品毛片一区二区三区 | 日韩欧美在线观看视频 | 国产精品99999 | 亚洲一区二区三区高清 | 九九久久久 | 国产91精品在线 | 亚洲一区免费在线 | 91视频免费在观看 | 久久久久亚洲精品 | 日本污视频 | 国产一区二区三区在线 | 亚洲视频一区在线观看 | 狠狠亚洲 | 亚洲精品中文字幕在线 | 欧美电影网 | 久久久久99| 91精品国产综合久久婷婷香蕉 | 成年免费在线观看 | 日韩在线视频一区 | 欧美日韩黄色一级片 | 日韩a级片| 99久久久久国产精品免费 |