天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

.NET c# 單體模式(Singleton)

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

  下面我寫一個類,為了看是不是單體,就加了一個計數器,如果是同一個類,那么這個類的計數每次調用以后就應該自動加一,而不是重新建對象歸零:

  .NET c# 單體模式 

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

        return objInstance;
    }
    public void ShowCount(){
        ObjCount++;
        Console.WriteLine("單個對象被調用了{0}次",ObjCount);
    }
};


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

        Console.ReadLine();
    }
};


我在這個Main里面執(zhí)行了5次,看看輸出的結果:
開始執(zhí)行單體模式
創(chuàng)建對象
單個對象被調用了1次
單個對象被調用了2次
單個對象被調用了3次
單個對象被調用了4次
單個對象被調用了5次
  在這里可以看出,每次都是使用的同一個對象,實現了單體。
  為了測試在多線程下面是否是單體,下面我寫了一個多線程測試的:
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();
再看看輸出的結果:開始執(zhí)行單體模式
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:3
創(chuàng)建對象
單個對象被調用了1次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:4
單個對象被調用了2次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:5
單個對象被調用了3次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:6
單個對象被調用了4次
ThreadState: Unstarted, ApartmentState: MTA,ManagedThreadId:7
單個對象被調用了5次

根據ManagedThreadId,可以看出不同的線路訪問達到了單體,OK!

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

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

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

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

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

    }
    public function ShowCount(){
        $this->ObjCount++;
        echo("單個對象被調用了".$this->ObjCount.'次數<hr/>');
    }


};


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

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

下面我們再來看看Java版本的寫法:

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

        return objInstance;
    }
    public void ShowCount(){
        ObjCount++;
        System.out.println("單個對象被調用了"+ 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í)行結果:
開始執(zhí)行單體模式
創(chuàng)建對象
單個對象被調用了1次
單個對象被調用了2次
單個對象被調用了3次
單個對象被調用了4次
單個對象被調用了5次

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

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

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲人成影院在线播放 | 少妇厨房愉情理9伦片视频 少妇被躁爽到高潮无码久久 | 在线亚洲精品福利网址导航 | 259luxu高跟黑色丝袜系列 | 国产熟妇无码一区二 | 被男按摩师添的好爽在线直播 | 秘密教学93话恩爱久等了免费 | 日韩爽爽影院在线播放 | 久久这里只有精品国产精品99 | 国产区免费在线观看 | 2017最新伦理伦理片67 | 国产成人久久精品激情 | 涩涩涩涩爱网站 | 青草伊人久久 | 免费看黄软件 | 国产成人精品久久一区二区三区 | 99热这里只有精品视频2 | 老师机影院 | 色欲AV蜜臀AV在线观看麻豆 | 亚洲黄色免费观看 | 中文亚洲大香伊蕉不卡一区 | 无码专区aaaaaa免费视频 | 99久久无码一区人妻A片竹菊 | 无遮18禁在线永久免费观看挡 | 男欢女爱免费视频 | 久久青青草原精品国产软件 | 强奷乱码中文字幕熟女免费 | 亚洲精品成人在线 | 先锋影音av最新资源 | 国产精品一区二区在线播放 | 天天狠狠色噜噜 | 粉嫩极品国产在线观看 | 男人插曲女人下生免费大全 | 国产免费高清mv视频在线观看 | 学校捏奶揉下面污文h | 久久热这里面只有精品 | 久久综合狠狠综合久久综合88 | 美女国产毛片A区内射 | 免费精品国产人妻国语麻豆 | 色AV色婷婷96人妻久久久 | 99精品视频一区在线视频免费观看 |