国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
【C#設(shè)計(jì)模式-代理模式】
一.定義:在軟件開(kāi)發(fā)過(guò)程中,一些對(duì)象有時(shí)候會(huì)由于網(wǎng)絡(luò)或其他的障礙,不能夠或者不能直接訪問(wèn)到這些對(duì)象,如果直接訪問(wèn)對(duì)象會(huì)給系統(tǒng)帶來(lái)不必要的復(fù)雜性,這時(shí)候可以在客戶端和目標(biāo)對(duì)象之間增加一層中間層,讓代理對(duì)象代替目標(biāo)對(duì)象,然后客戶端只需要訪問(wèn)代理對(duì)象,由代理對(duì)象去幫我們?nèi)フ?qǐng)求目標(biāo)對(duì)象并返回結(jié)果給客戶端,這樣的思路就是代理模式。
二.代理模式的種類(lèi):1.遠(yuǎn)程(Remote)代理:為一個(gè)位于不同的地址空間的對(duì)象提供一個(gè)局域代表對(duì)象。這個(gè)不同的地址空間可以是本電腦中,也可以在另一臺(tái)電腦中。最典型的例子就是——客戶端調(diào)用Web服務(wù)或WCF服務(wù)。
2.虛擬(Virtual)代理:根據(jù)需要?jiǎng)?chuàng)建一個(gè)資源消耗較大的對(duì)象,使得對(duì)象只在需要時(shí)才會(huì)被真正創(chuàng)建。
3.Copy-on-Write代理:虛擬代理的一種,把復(fù)制(或者叫克隆)拖延到只有在客戶端需要時(shí),才真正采取行動(dòng)。
4.保護(hù)(Protect or Access)代理:控制一個(gè)對(duì)象的訪問(wèn),可以給不同的用戶提供不同級(jí)別的使用權(quán)限。
5.防火墻(Firewall)代理:保護(hù)目標(biāo)不讓惡意用戶接近。
6.智能引用(Smart Reference)代理:當(dāng)一個(gè)對(duì)象被引用時(shí),提供一些額外的操作,比如將對(duì)此對(duì)象調(diào)用的次數(shù)記錄下來(lái)等。
7.Cache代理:為某一個(gè)目標(biāo)操作的結(jié)果提供臨時(shí)的存儲(chǔ)空間,以便多個(gè)客戶端可以這些結(jié)果。
其中虛擬代理、遠(yuǎn)程代理、智能引用代理和保護(hù)代理較為常見(jiàn)的代理模式。
三.實(shí)現(xiàn):引用生活中的例子,假設(shè)一同事現(xiàn)在去香港旅游,我想讓他幫忙帶一部港版的iphone6s,和一臺(tái)macbook,可以假設(shè)這個(gè)同事是我的一個(gè)代理,幫助我去處理買(mǎi)東西的事情,然后回來(lái)之后再放回給我物品。
[csharp] view plain copy
print?
/// <summary>
/// 抽象主題的角色
/// </summary>
public abstract class Person
{
/// <summary>
/// 買(mǎi)東西
/// </summary>
public abstract void BuyProduct();
}
[csharp] view plain copy
print?
/// <summary>
/// 真實(shí)主題角色,請(qǐng)求代理做事情的對(duì)象
/// </summary>
public class RealBuyPerson:Person
{
public override void BuyProduct()
{
Console.WriteLine("幫我買(mǎi)一個(gè)港版Iphone6s和Bacbook電腦");
}
}
[csharp] view plain copy
print?
/// <summary>
/// 代理角色
/// </summary>
public class Friend:Person
{
RealBuyPerson realSubject;
public override void BuyProduct()
{
Console.WriteLine("通過(guò)代理類(lèi)訪問(wèn)真是實(shí)體的方法");
if (realSubject == null)
{
realSubject = new RealBuyPerson();
}
this.prebuyproduct();
//調(diào)用真實(shí)主題的方法
realSubject.BuyProduct();
this.PostBuyProduct();
}
/// <summary>
/// 代理角色執(zhí)行的一系列操作
/// </summary>
public void prebuyproduct()
{
Console.WriteLine("記錄下的清單,包括有Iphone,和電腦");
}
/// <summary>
/// 買(mǎi)完?yáng)|西之后的處理工作
/// </summary>
public void PostBuyProduct()
{
Console.WriteLine("進(jìn)行分類(lèi)打包");
}
}
[csharp] view plain copy
print?
/// <summary>
/// C#設(shè)計(jì)模式-代理模式
/// </summary>
class Program
{
static void Main(string[] args)
{
//創(chuàng)建代理對(duì)象并發(fā)出請(qǐng)求
Person per = new Friend();
per.BuyProduct();
Console.ReadKey();
}
}
角色:
抽象主題角色(Person):聲明了真實(shí)主題和代理主題的公共接口,在使用真實(shí)主題的任何地方都可以使用代理主題
代理主題角色(Friend):代理主題角色內(nèi)部含有對(duì)真實(shí)主題的引用,可以操作真實(shí)主題對(duì)象;代理主題角色負(fù)責(zé)在需要的時(shí)候創(chuàng)建真實(shí)主題對(duì)象;代理角色通常在將客戶端調(diào)用傳遞到真實(shí)主題之前或之后,都要執(zhí)行一些其他的操作,而不是單純地將調(diào)用傳遞給真實(shí)主題對(duì)象
真實(shí)主題角色(RealBuyPerson):定義了代理角色所代表的真是對(duì)象
優(yōu)點(diǎn):
(1).職責(zé)清晰真實(shí)的角色就是實(shí)現(xiàn)實(shí)際的業(yè)務(wù)邏輯,不用關(guān)心其他非本職責(zé)的事務(wù),通過(guò)后期的代理完成一件完成事務(wù),附帶的結(jié)果就是編程簡(jiǎn)潔清晰。
(2).代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之間起到中介的作用,這樣起到了中介的作用和保護(hù)了目標(biāo)對(duì)象的作用。
(3).高擴(kuò)展性
缺點(diǎn):
(1).由于在客戶端和真實(shí)主題之間增加了一個(gè)代理對(duì)象,所以會(huì)造成請(qǐng)求的處理速度變慢
(2).實(shí)現(xiàn)代理類(lèi)也需要額外的工作,從而增加了系統(tǒng)的實(shí)現(xiàn)復(fù)雜度。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C#設(shè)計(jì)模式之代理模式(一)
深入淺出基于Java的代理設(shè)計(jì)模式
C#設(shè)計(jì)模式學(xué)習(xí)筆記:(12)代理模式
代理模式
深入理解設(shè)計(jì)模式(23):代理模式
設(shè)計(jì)模式學(xué)習(xí)心得(持續(xù)更新)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服