青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

SoRoMan

人若無名,便可專心練劍.

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  12 隨筆 :: 1 文章 :: 41 評論 :: 0 Trackbacks

<轉貼-To Me>
概述

Singleton模式?

五種實現(xiàn)

1 .簡單實現(xiàn)

?1 public ? sealed ? class ?Singleton
?2 {
?3 ???? static ?Singleton?instance = null ;
?4
?5 ????Singleton()
?6 ???? {
?7 ????}

?8
?9 ???? public ? static ?Singleton?Instance
10 ???? {
11 ???????? get
12 ???????? {
13 ???????????? if ?(instance == null )
14 ???????????? {
15 ????????????????instance? = ? new ?Singleton();
16 ????????????}

17 ???????????? return ?instance;
18 ????????}

19 ????}

20 }

這種方式的實現(xiàn)對于線程來說并不是安全的,因為在多線程的環(huán)境下有可能得到Sigleton類的多個實例。如果同時有兩個線程去判斷(instance == null),并且得到的結果為真,這時兩個線程都會創(chuàng)建類Sigleton的實例,這樣就違背了Sigleton模式的原則。實際上在上述代碼中,有可能在計算出表達式的值之前,對象實例已經被創(chuàng)建,但是內存模型并不能保證對象實例在第二個線程創(chuàng)建之前被發(fā)現(xiàn)。

該實現(xiàn)方式主要有兩個優(yōu)點:

l???????? 由于實例是在 Instance屬性方法內部創(chuàng)建的,因此類可以使用附加功能(例如,對子類進行實例化),即使它可能引入不想要的依賴性。

l???????? 直到對象要求產生一個實例才執(zhí)行實例化;這種方法稱為“惰性實例化”。惰性實例化避免了在應用程序啟動時實例化不必要的 singleton

2 .安全的線程

?1 public ? sealed ? class ?Singleton
?2 {
?3 ???? static ?Singleton?instance = null ;
?4 ???? static ? readonly ? object ?padlock? = ? new ? object ();
?5
?6 ????Singleton()
?7 ???? {
?8 ????}

?9
10 ???? public ? static ?Singleton?Instance
11 ???? {
12 ???????? get
13 ???????? {
14 ???????????? lock ?(padlock)
15 ???????????? {
16 ???????????????? if ?(instance == null )
17 ???????????????? {
18 ????????????????????instance? = ? new ?Singleton();
19 ????????????????}

20 ???????????????? return ?instance;
21 ????????????}

22 ????????}

23 ????}

24 }

25
26

這種方式的實現(xiàn)對于線程來說是安全的。我們首先創(chuàng)建了一個進程輔助對象,線程在進入時先對輔助對象加鎖然后再檢測對象是否被創(chuàng)建,這樣可以確保只有一個實例被創(chuàng)建,因為在同一個時刻加了鎖的那部分程序只有一個線程可以進入。這種情況下,對象實例由最先進入的那個線程創(chuàng)建,后來的線程在進入時( instence == null )為假,不會再去創(chuàng)建對象實例了。但是這種實現(xiàn)方式增加了額外的開銷,損失了性能。

3 .雙重鎖定

?1 public ? sealed ? class ?Singleton
?2 {
?3 ???? static ?Singleton?instance = null ;
?4 ???? static ? readonly ? object ?padlock? = ? new ? object ();
?5
?6 ????Singleton()
?7 ???? {
?8 ????}

?9
10 ???? public ? static ?Singleton?Instance
11 ???? {
12 ???????? get
13 ???????? {
14 ???????????? if ?(instance == null )
15 ???????????? {
16 ???????????????? lock ?(padlock)
17 ???????????????? {
18 ???????????????????? if ?(instance == null )
19 ???????????????????? {
20 ????????????????????????instance? = ? new ?Singleton();
21 ????????????????????}

22 ????????????????}

23 ????????????}

24 ???????????? return ?instance;
25 ????????}

26 ????}

27 }

28

這種實現(xiàn)方式對多線程來說是安全的,同時線程不是每次都加鎖,只有判斷對象實例沒有被創(chuàng)建時它才加鎖,有了我們上面第一部分的里面的分析,我們知道,加鎖后還得再進行對象是否已被創(chuàng)建的判斷。它 解決了線程并發(fā)問題,同時避免在每個 Instance 屬性方法的調用中都出現(xiàn)獨占鎖定。它還允許您將實例化延遲到第一次訪問對象時發(fā)生。實際上,應用程序很少需要這種類型的實現(xiàn)。大多數(shù)情況下我們會用靜態(tài)初始化。 這種方式仍然有很多缺點:無法實現(xiàn)延遲初始化。

4 .靜態(tài)初始化

?1 public ? sealed ? class ?Singleton
?2 {
?3 ???? static ? readonly ?Singleton?instance = new ?Singleton();
?4
?5 ???? static ?Singleton()
?6 ???? {
?7 ????}

?8
?9 ????Singleton()
10 ???? {
11 ????}

12
13 ???? public ? static ?Singleton?Instance
14 ???? {
15 ???????? get
16 ???????? {
17 ???????????? return ?instance;
18 ????????}

19 ????}

20 }

21

看到上面這段富有戲劇性的代碼,我們可能會產生懷疑,這還是 Sigleton 模式嗎? 在此實現(xiàn)中,將在第一次引用類的任何成員時創(chuàng)建實例。公共語言運行庫負責處理變量初始化。該類標記為 sealed 以阻止發(fā)生派生,而派生可能會增加實例。此外,變量標記為 readonly,這意味著只能在靜態(tài)初始化期間(此處顯示的示例)或在類構造函數(shù)中分配變量。

該實現(xiàn)與前面的示例類似,不同之處在于它依賴公共語言運行庫來初始化變量。它仍然可以用來解決 Singleton模式試圖解決的兩個基本問題:全局訪問和實例化控制。公共靜態(tài)屬性為訪問實例提供了一個全局訪問點。此外,由于構造函數(shù)是私有的,因此不能在類本身以外實例化 Singleton 類;因此,變量引用的是可以在系統(tǒng)中存在的唯一的實例。

由于 Singleton 實例被私有靜態(tài)成員變量引用,因此在類首次被對 Instance屬性的調用所引用之前,不會發(fā)生實例化。

這種方法唯一的潛在缺點是,您對實例化機制的控制權較少。在Design Patterns形式中,您能夠在實例化之前使用非默認的構造函數(shù)或執(zhí)行其他任務。由于在此解決方案中由 .NET Framework 負責執(zhí)行初始化,因此您沒有這些選項。在大多數(shù)情況下,靜態(tài)初始化是在 .NET 中實現(xiàn) Singleton的首選方法。

5 .延遲初始化

?1 public ? sealed ? class ?Singleton
?2 {
?3 ????Singleton()
?4 ???? {
?5 ????}

?6
?7 ???? public ? static ?Singleton?Instance
?8 ???? {
?9 ???????? get
10 ???????? {
11 ???????????? return ?Nested.instance;
12 ????????}

13 ????}

14 ????
15 ???? class ?Nested
16 ???? {
17 ???????? static ?Nested()
18 ???????? {
19 ????????}

20
21 ???????? internal ? static ? readonly ?Singleton?instance? = ? new ?Singleton();
22 ????}

23 }

24

這里,初始化工作有Nested類的一個靜態(tài)成員來完成,這樣就實現(xiàn)了延遲初始化,并具有很多的優(yōu)勢,是值得推薦的一種實

現(xiàn)方式。

實現(xiàn)要點

l??????? Sigleton模式是限制而不是改進類的創(chuàng)建。

l???????? Sigleton類中的實例構造器可以設置為Protected以允許子類派生。

l???????? Sigleton模式一般不要支持Icloneable接口,因為這可能導致多個對象實例,與Sigleton模式的初衷違背。

l???????? Sigleton模式一般不要支持序列化,這也有可能導致多個對象實例,這也與Sigleton模式的初衷違背。

l???????? Sigleton只考慮了對象創(chuàng)建的管理,沒有考慮到銷毀的管理,就支持垃圾回收的平臺和對象的開銷來講,我們一般沒必要對其銷毀進行特殊的管理。

l???????? 理解和擴展Sigleton模式的核心是“如何控制用戶使用new對一個類的構造器的任意調用”。

l???????? 可以很簡單的修改一個 Sigleton ,使它有少數(shù)幾個實例,這樣做是允許的而且是有意義的 。

優(yōu)點

l???????? 實例控制: Singleton 會阻止其他對象實例化其自己的 Singleton對象的副本,從而確保所有對象都訪問唯一實例

l???????? 靈活性:因為類控制了實例化過程,所以類可以更加靈活修改實例化過程

缺點

l???????? 開銷:雖然數(shù)量很少, 但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷??梢酝ㄟ^使用靜態(tài)初始化解決此問題,上面的五種實現(xiàn)方式中已經說過了。

l????????? 可能的開發(fā)混淆: 使用 singleton 對象(尤其在類庫中定義的對象)時,開發(fā)人員必須記住自己不能使用 new 關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發(fā)人員可能會意外發(fā)現(xiàn)自己無法直接實例化此類。

l???????? 對象的生存期: Singleton 不能解決刪除單個對象的問題。在提供內存管理的語言中(例如基于 .NET Framework 的語言),只有 Singleton類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除
對象實例,但這樣會導致 Singleton類中出現(xiàn)懸浮引用。

適用性

l???????? 當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。

l???????? 當這個唯一實例應該是通過子類化可擴展的,并且客戶應該無需更改代碼就能使用一個擴展的實例時。

應用場景

l???????? 每臺計算機可以有若干個打印機,但只能有一個 Printer Spooler ,避免兩個打印作業(yè)同時輸出到打印機。
(摘自呂震宇的
C# 設計模式(7 )-Singleton Pattern

l???????? PC 機中可能有幾個串口,但只能有一個 COM1 口的實例。

l???????? 系統(tǒng)中只能有一個窗口管理器。

l???????? .NET Remoting 中服務器激活對象中的 Sigleton 對象,確保所有的客戶程序的請求都只有一個實例來處理。

完整示例

這是一個簡單的計數(shù)器例子,四個線程同時進行計數(shù)。

?1 using ?System;
?2 using ?System.Threading;
?3
?4 namespace ?SigletonPattern.SigletonCounter
?5 {
?6 ???? /**/ /// ? <summary>
?7 ???? /// ?功能:簡單計數(shù)器的單件模式
?8 ???? /// ?編寫:Terrylee
?9 ???? /// ?日期:2005年12月06日
10 ???? /// ? </summary>

11 ???? public ? class ?CountSigleton
12 ???? {
13 ???????? /**/ /// 存儲唯一的實例
14 ???????? static ?CountSigleton?uniCounter? = ? new ?CountSigleton();??
15 ???
16 ???????? /**/ /// 存儲計數(shù)值
17 ???????? private ? int ?totNum? = ? 0 ;??
18 ???
19 ???????? private ?CountSigleton()?
20 ???
21 ???????? {?
22 ???????????? /**/ /// 線程延遲2000毫秒
23 ????????????Thread.Sleep( 2000 );
24 ????????}
?
25 ???
26 ???????? static ? public ?CountSigleton?Instance()?
27 ???
28 ???????? {?
29 ???
30 ???????????? return ?uniCounter;?
31 ???
32 ????????}
?
33 ????????
34 ???????? /**/ /// 計數(shù)加1
35 ???????? public ? void ?Add()
36 ???????? {?
37 ????????????totNum? ++ ;
38 ????????}
??
39 ????????
40 ???????? /**/ /// 獲得當前計數(shù)值
41 ???????? public ? int ?GetCounter()
42 ???????? {?
43 ???????????? return ?totNum;
44 ????????}
?
45
46 ????}

47 }

48

?1 using ?System;
?2 using ?System.Threading;
?3 using ?System.Text;
?4
?5 namespace ?SigletonPattern.SigletonCounter
?6 {
?7 ???? /**/ /// ? <summary>
?8 ???? /// ?功能:創(chuàng)建一個多線程計數(shù)的類
?9 ???? /// ?編寫:Terrylee
10 ???? /// ?日期:2005年12月06日
11 ???? /// ? </summary>

12 ???? public ? class ?CountMutilThread
13 ???? {
14 ???????? public ?CountMutilThread()
15 ???????? {
16 ????????????
17 ????????}

18
19 ???????? /**/ /// ? <summary>
20 ???????? /// ?線程工作
21 ???????? /// ? </summary>

22 ???????? public ? static ? void ?DoSomeWork()
23 ???????? {
24 ???????????? /**/ /// 構造顯示字符串
25 ???????????? string ?results? = ? "" ;
26
27 ???????????? /**/ /// 創(chuàng)建一個Sigleton實例
28 ???CountSigleton?MyCounter? = ?CountSigleton.Instance();
29
30 ???????????? /**/ /// 循環(huán)調用四次
31 ???????????? for ( int ?i = 1 ;i < 5 ;i ++ )
32 ???????????? {
33 ??????? /**/ /// 開始計數(shù)
34 ????????????????MyCounter.Add();
35 ????????????????
36 ????????????????results? += " 線程 " ;
37 ????????????????results? += ?i.ToString()? + ? " ——〉 " ;
38 ????????????????results? += ? " 當前的計數(shù): " ;
39 ????????????????results? += ?MyCounter.GetCounter().ToString();
40 ????????????????results? += ? " \n " ;
41
42 ????????????????Console.WriteLine(results);
43 ????????????????
44 ???????????????? /**/ /// 清空顯示字符串
45 ?????????results? = ? "" ;
46 ????????????}

47 ????????}

48
49 ???????? public ? void ?StartMain()
50 ???????? {
51
52 ????????????Thread?thread0? = ?Thread.CurrentThread;?
53 ???
54 ????????????thread0.Name? = ? " Thread?0 " ;?
55 ???
56 ????????????Thread?thread1? = new ?Thread( new ?ThreadStart(DoSomeWork));?
57 ???
58 ????????????thread1.Name? = ? " Thread?1 " ;?
59 ???
60 ????????????Thread?thread2? = new ?Thread( new ?ThreadStart(DoSomeWork));?
61 ???
62 ????????????thread2.Name? = ? " Thread?2 " ;?
63 ???
64 ????????????Thread?thread3? = new ?Thread( new ?ThreadStart(DoSomeWork));?
65 ???
66 ????????????thread3.Name? = ? " Thread?3 " ;?
67 ???
68 ????????????thread1.Start();?
69 ???
70 ????????????thread2.Start();?
71 ???
72 ????????????thread3.Start();?
73 ????????????
74 ???????????? /**/ /// 線程0也只執(zhí)行和其他線程相同的工作
75 ????????????DoSomeWork();?
76 ????????}

77 ????}

78 }

79

?1 using ?System;
?2 using ?System.Text;
?3 using ?System.Threading;
?4
?5 namespace ?SigletonPattern.SigletonCounter
?6 {
?7 ???? /**/ /// ? <summary>
?8 ???? /// ?功能:實現(xiàn)多線程計數(shù)器的客戶端
?9 ???? /// ?編寫:Terrylee
10 ???? /// ?日期:2005年12月06日
11 ???? /// ? </summary>

12 ???? public ? class ?CountClient
13 ???? {
14 ???????? public ? static ? void ?Main( string []?args)
15 ???????? {
16 ???????CountMutilThread?cmt? = ? new ?CountMutilThread();
17
18 ????????????cmt.StartMain();
19
20 ????????????Console.ReadLine();
21 ????????}

22 ????}

23 }

24

總結

Sigleton 設計模式是一個非常有用的機制,可用于在面向對象的應用程序中提供單個訪問點。文中通過五種實現(xiàn)方式的比較和一個完整的示例,完成了對 Sigleton 模式的一個總結和探索。用一句廣告詞來概括 Sigleton 模式就是“簡約而不簡單”。

源碼下載:/Files/Terrylee/SigletonPattern.rar


?

一、?單例(Singleton)模式

單例模式的特點:

  • 單例類只能有一個實例。
  • 單例類必須自己創(chuàng)建自己的唯一實例。
  • 單例類必須給所有其它對象提供這一實例。

單例模式應用:

  • 每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,避免兩個打印作業(yè)同時輸出到打印機。
  • 一個具有自動編號主鍵的表可以有多個用戶同時使用,但數(shù)據(jù)庫中只能有一個地方分配下一個主鍵編號。否則會出現(xiàn)主鍵重復。


二、?Singleton模式的結構:

Singleton模式包含的角色只有一個,就是Singleton。Singleton擁有一個私有構造函數(shù),確保用戶無法通過new直接實例它。除此之外,該模式中包含一個靜態(tài)私有成員變量instance與靜態(tài)公有方法Instance()。Instance方法負責檢驗并實例化自己,然后存儲在靜態(tài)成員變量中,以確保只有一個實例被創(chuàng)建。(關于線程問題以及C#所特有的Singleton將在后面詳細論述)。


三、?程序舉例:

該程序演示了Singleton的結構,本身不具有任何實際價值。

// ?Singleton?pattern?--?Structural?example??
using ?System;

// ?"Singleton"
class ?Singleton
{
??
// ?Fields
?? private ? static ?Singleton?instance;

??
// ?Constructor
?? protected ?Singleton()? {}

??
// ?Methods
?? public ? static ?Singleton?Instance()
??
{
????
// ?Uses?"Lazy?initialization"
???? if (?instance? == ? null ?)
??????instance?
= ? new ?Singleton();

????
return ?instance;
??}

}


/// ? <summary>
/// ?Client?test
/// ? </summary>

public ? class ?Client
{
??
public ? static ? void ?Main()
??
{
????
// ?Constructor?is?protected?--?cannot?use?new
????Singleton?s1? = ?Singleton.Instance();
????Singleton?s2?
= ?Singleton.Instance();

????
if (?s1? == ?s2?)
??????Console.WriteLine(?
" The?same?instance " ?);
??}

}



四、?在什么情形下使用單例模式:

使用Singleton模式有一個必要條件:在一個系統(tǒng)要求一個類只有一個實例時才應當使用單例模式。反過來,如果一個類可以有幾個實例共存,就不要使用單例模式。

注意:

不要使用單例模式存取全局變量。這違背了單例模式的用意,最好放到對應類的靜態(tài)成員中。

不要將數(shù)據(jù)庫連接做成單例,因為一個系統(tǒng)可能會與數(shù)據(jù)庫有多個連接,并且在有連接池的情況下,應當盡可能及時釋放連接。Singleton模式由于使用靜態(tài)成員存儲類實例,所以可能會造成資源無法及時釋放,帶來問題。


五、?Singleton模式在實際系統(tǒng)中的實現(xiàn)

下面這段Singleton代碼演示了負載均衡對象。在負載均衡模型中,有多臺服務器可提供服務,任務分配器隨機挑選一臺服務器提供服務,以確保任務均衡(實際情況比這個復雜的多)。這里,任務分配實例只能有一個,負責挑選服務器并分配任務。

// ?Singleton?pattern?--?Real?World?example??

using ?System;
using ?System.Collections;
using ?System.Threading;

// ?"Singleton"
class ?LoadBalancer
{
??
// ?Fields
?? private ? static ?LoadBalancer?balancer;
??
private ?ArrayList?servers? = ? new ?ArrayList();
??
private ?Random?random? = ? new ?Random();

??
// ?Constructors?(protected)
?? protected ?LoadBalancer()
??
{
????
// ?List?of?available?servers
????servers.Add(? " ServerI " ?);
????servers.Add(?
" ServerII " ?);
????servers.Add(?
" ServerIII " ?);
????servers.Add(?
" ServerIV " ?);
????servers.Add(?
" ServerV " ?);
??}


??
// ?Methods
?? public ? static ?LoadBalancer?GetLoadBalancer()
??
{
????
// ?Support?multithreaded?applications?through
????
// ?"Double?checked?locking"?pattern?which?avoids
????
// ?locking?every?time?the?method?is?invoked
???? if (?balancer? == ? null ?)
????
{
??????
// ?Only?one?thread?can?obtain?a?mutex
??????Mutex?mutex? = ? new ?Mutex();
??????mutex.WaitOne();

??????
if (?balancer? == ? null ?)
????????balancer?
= ? new ?LoadBalancer();

??????mutex.Close();
????}

????
return ?balancer;
??}


??
// ?Properties
?? public ? string ?Server
??
{
????
get
????
{
??????
// ?Simple,?but?effective?random?load?balancer
?????? int ?r? = ?random.Next(?servers.Count?);
??????
return ?servers[?r?].ToString();
????}

??}

}


/// ? <summary>
/// ?SingletonApp?test
/// ? </summary>
///

public ? class ?SingletonApp
{
??
public ? static ? void ?Main(? string []?args?)
??
{
????LoadBalancer?b1?
= ?LoadBalancer.GetLoadBalancer();
????LoadBalancer?b2?
= ?LoadBalancer.GetLoadBalancer();
????LoadBalancer?b3?
= ?LoadBalancer.GetLoadBalancer();
????LoadBalancer?b4?
= ?LoadBalancer.GetLoadBalancer();

????
// ?Same?instance?
???? if (?(b1? == ?b2)? && ?(b2? == ?b3)? && ?(b3? == ?b4)?)
??????Console.WriteLine(?
" Same?instance " ?);

????
// ?Do?the?load?balancing
????Console.WriteLine(?b1.Server?);
????Console.WriteLine(?b2.Server?);
????Console.WriteLine(?b3.Server?);
????Console.WriteLine(?b4.Server?);
??}

}



六、?C#中的Singleton模式

C#的獨特語言特性決定了C#擁有實現(xiàn)Singleton模式的獨特方法。這里不再贅述原因,給出幾個結果:

方法一:

下面是利用.NET Framework平臺優(yōu)勢實現(xiàn)Singleton模式的代碼:

sealed ? class ?Singleton
{
???
private ?Singleton();
???
public ? static ? readonly ?Singleton?Instance = new ?Singleton();
}

這使得代碼減少了許多,同時也解決了線程問題帶來的性能上損失。那么它又是怎樣工作的呢?

注意到,Singleton類被聲明為sealed,以此保證它自己不會被繼承,其次沒有了Instance的方法,將原來_instance成員變量變成public readonly,并在聲明時被初始化。通過這些改變,我們確實得到了Singleton的模式,原因是在JIT的處理過程中,如果類中的static屬性被任何方法使用時,.NET Framework將對這個屬性進行初始化,于是在初始化Instance屬性的同時Singleton類實例得以創(chuàng)建和裝載。而私有的構造函數(shù)和readonly(只讀)保證了Singleton不會被再次實例化,這正是Singleton設計模式的意圖。
(摘自:http://www.cnblogs.com/huqingyu/archive/2004/07/09/22721.aspx

不過這也帶來了一些問題,比如無法繼承,實例在程序一運行就被初始化,無法實現(xiàn)延遲初始化等。

詳細情況可以參考微軟MSDN文章:《Exploring the Singleton Design Pattern》

方法二:

既然方法一存在問題,我們還有其它辦法。

public ? sealed ? class ?Singleton
{
??Singleton()
??
{
??}


??
public ? static ?Singleton?GetInstance()
??
{
????
return ?Nested.instance;
??}

????
??
class ?Nested
??
{
????
// ?Explicit?static?constructor?to?tell?C#?compiler
????
// ?not?to?mark?type?as?beforefieldinit
???? static ?Nested()
????
{
????}


????
internal ? static ? readonly ?Singleton?instance? = ? new ?Singleton();
??}

}

這實現(xiàn)了延遲初始化,并具有很多優(yōu)勢,當然也存在一些缺點。詳細內容請訪問:《Implementing the Singleton Pattern in C#》。文章包含五種Singleton實現(xiàn),就模式、線程、效率、延遲初始化等很多方面進行了詳細論述。

posted on 2006-07-16 23:12 SoRoMan 閱讀(1576) 評論(3)  編輯 收藏 引用

評論

# 哇~小雞好厲害^_^崇拜ing~re: Design Pattern之Singleton模式 2006-07-17 10:25 Catherine
小雞辛苦了~
俺好好看!  回復  更多評論
  

# 小雞面試成功~~re: Design Pattern之Singleton模式 2006-07-19 10:04 Catherine
今天小雞去9you面試~
預祝成功^_^  回復  更多評論
  

# re: Design Pattern之Singleton模式 2007-12-30 08:52 sdgsdg
http://eros-amatoriale-gratuito.gradis-tun.info
http://video-xxx-89-com.sculaccia-tun.info
http://maschio-nudo-coito-anale.sculaccia-tun.info
http://cerco-donna-sesso-pulito.gradis-tun.info
http://gay-hairy-men.gradis-tun.info
http://farm-beast-porno-zoo-gratis-clip.sculaccia-tun.info
http://incontro-sesso-tre.fatte-tun.info
http://matura-daily-gallery.gradis-tun.info
http://trans-riceve-a-roma.sculaccia-tun.info
http://foto-sesso-anale-cazzo-grosso-nero.gradis-tun.info
http://filmati-maialone-freeware.gradis-tun.info
http://grande-obese-figa.fatte-tun.info
http://foto-fatish.fatte-tun.info
http://super-sexi-hard-moovie.sculaccia-tun.info
http://anteprime-gratis-donna-porca.sculaccia-tun.info
http://forum-sito-porno-gratis.gradis-tun.info
http://posizione-deel-sesso.sculaccia-tun.info
http://sesso-rio-de-janeiro.fatte-tun.info
http://hot-girl-xxx.fatte-tun.info
http://veb-cam-gÄarl.gradis-tun.info
http://anteprime-gratis-film-porno.sculaccia-tun.info
http://sesso-orale-lesbo.gradis-tun.info
http://foto-video-porno-asiatica-gratis.sculaccia-tun.info
http://figa-vecchia-casalinga-gratis.fatte-tun.info
http://marco-passera-basket.gradis-tun.info
http://giovane-ragazza-fanno-sesso.sculaccia-tun.info
http://sesso-al-telefono-solo-ascolto.sculaccia-tun.info  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲日韩欧美视频| 国产精品国产精品| 在线视频中文亚洲| 一片黄亚洲嫩模| 亚洲一级二级在线| 欧美影院一区| 久久综合伊人77777蜜臀| 可以看av的网站久久看| 欧美成人综合一区| 欧美三级视频在线观看| 国产精品一区二区a| 亚洲综合精品自拍| 欧美中文在线观看国产| 欧美成人精品h版在线观看| 欧美三区视频| 国产自产在线视频一区| 亚洲三级视频在线观看| 午夜精品国产| 男人插女人欧美| 一区二区三区欧美在线| 欧美在线视频一区二区| 欧美日韩国产一区精品一区 | 亚洲大胆女人| 亚洲性视频网站| 久久久亚洲影院你懂的| 亚洲美女av网站| 久久久久久久91| 欧美视频在线播放| 亚洲国产精品免费| 久久久国产精品亚洲一区 | 欧美不卡三区| 国产精品视频午夜| 亚洲精品一区二| 久久久久久一区| 在线一区二区三区四区| 蜜桃伊人久久| 国外成人网址| 性伦欧美刺激片在线观看| 亚洲欧洲三级电影| 午夜国产欧美理论在线播放| 欧美日韩hd| 亚洲黄色成人久久久| 久久中文欧美| 欧美一区二视频在线免费观看| 欧美日本中文| 亚洲精品日韩一| 欧美大尺度在线观看| 久久精品日韩一区二区三区| 国产精一区二区三区| 亚洲图片欧美日产| 亚洲激情一区| 欧美成人伊人久久综合网| 亚洲国产精品第一区二区| 免费不卡亚洲欧美| 久久久爽爽爽美女图片| 狠狠做深爱婷婷久久综合一区| 欧美在线高清| 欧美一激情一区二区三区| 国产日韩精品电影| 欧美制服丝袜第一页| 亚洲女同性videos| 国产精品一区二区欧美| 欧美亚洲自偷自偷| 亚洲欧美日韩国产一区二区三区| 亚洲精品在线一区二区| 麻豆精品在线视频| 亚洲欧洲日韩综合二区| 亚洲日韩欧美视频一区| 欧美日韩天堂| 午夜日韩在线| 欧美一区二区三区成人| 韩日视频一区| 欧美激情第五页| 欧美激情五月| 性久久久久久久久| 久久久久综合| 夜夜精品视频一区二区| 亚洲午夜羞羞片| 黄色成人av在线| 亚洲激情成人在线| 国产精品国产三级国产专区53| 校园春色综合网| 久久久视频精品| 亚洲午夜精品| 久久成人免费电影| 日韩一级二级三级| 午夜一区不卡| 日韩视频在线观看国产| 亚洲在线观看免费视频| 一区二区三区在线视频播放 | 欧美黄免费看| 国产精品超碰97尤物18| 久久精品视频导航| 欧美精品免费播放| 久久精品道一区二区三区| 欧美大片在线观看| 欧美中文字幕在线观看| 麻豆精品在线播放| 欧美一区亚洲一区| 欧美成人a视频| 久久福利一区| 欧美日韩亚洲另类| 欧美高清在线一区| 国产日韩精品在线| 99视频在线观看一区三区| 在线观看中文字幕不卡| 亚洲一区激情| 亚洲美女视频网| 久久久久免费视频| 午夜精品福利视频| 欧美日韩aaaaa| 亚洲春色另类小说| 韩国一区二区三区在线观看| 一本色道久久综合狠狠躁篇的优点 | 亚洲欧美日韩成人| 欧美高清视频一区二区三区在线观看| 亚洲欧美一区二区精品久久久| 久久天天躁狠狠躁夜夜爽蜜月 | 亚洲福利在线观看| 国内成人精品2018免费看| 亚洲深夜福利在线| 一本色道**综合亚洲精品蜜桃冫| 蜜臀av在线播放一区二区三区| 国产精品久久久久免费a∨| 亚洲国产天堂久久综合网| 亚洲国产精品激情在线观看| 久久人91精品久久久久久不卡| 欧美在线观看一二区| 欧美视频一区二区在线观看| 亚洲精品国精品久久99热一| 亚洲国产1区| 久久永久免费| 欧美激情麻豆| 亚洲精品激情| 欧美高清影院| 亚洲精品视频一区| 夜夜精品视频一区二区| 欧美日韩在线视频首页| 一区二区三区久久精品| 亚洲午夜精品一区二区三区他趣| 欧美日韩大片| 亚洲视频一区在线观看| 欧美一区二区精品久久911| 国产精品一二一区| 欧美在线视频播放| 老司机精品久久| 亚洲福利视频一区二区| 欧美大片一区二区| 一区二区免费在线播放| 性欧美办公室18xxxxhd| 国产日韩一区二区三区在线| 欧美一区国产在线| 欧美国产日韩精品免费观看| 亚洲精品一区二区在线| 欧美日韩亚洲精品内裤| 午夜精品久久久久久久 | 一区二区免费在线播放| 欧美在线观看视频一区二区三区| 国产无一区二区| 久久综合伊人77777麻豆| 亚洲久久在线| 久久成人av少妇免费| 尤物视频一区二区| 欧美日韩国产精品一区二区亚洲| 夜夜嗨网站十八久久| 久久久福利视频| 日韩午夜精品视频| 国产视频一区在线| 欧美激情aaaa| 午夜精品成人在线视频| 亚洲国产美国国产综合一区二区| 亚洲一区二区三区777| 国产综合视频| 欧美日韩在线视频首页| 久久免费黄色| 亚洲欧美日韩专区| 亚洲国内在线| 久久男女视频| 小黄鸭视频精品导航| 亚洲精品国产品国语在线app| 国产欧美一级| 欧美日韩在线视频首页| 久热精品视频在线观看| 亚洲淫性视频| 亚洲日本成人| 欧美成人午夜激情视频| 久久成人国产| 午夜视频在线观看一区二区三区| 亚洲国产高清在线| 国产性天天综合网| 国产精品都在这里| 欧美精品在线免费| 另类综合日韩欧美亚洲| 午夜精彩视频在线观看不卡 | 亚洲综合视频1区| 亚洲激情第一区| 欧美91福利在线观看| 久久激情一区| 欧美在线观看视频在线| 亚洲综合色丁香婷婷六月图片|