亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

.Net結(jié)構(gòu)型設(shè)計(jì)模式之外觀模式(Facade)

 更新時(shí)間:2022年05月25日 15:37:08   作者:springsnow  
這篇文章介紹了.Net結(jié)構(gòu)型設(shè)計(jì)模式之外觀模式(Facade),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、動(dòng)機(jī)(Motivate)

在軟件系統(tǒng)開(kāi)發(fā)的過(guò)程中,當(dāng)組件的客戶(hù)(即外部接口,或客戶(hù)程序)和組件中各種復(fù)雜的子系統(tǒng)有了過(guò)多的耦合,隨著外部客戶(hù)程序和各子系統(tǒng)的演化,這種過(guò)多的耦合面臨很多變化的挑戰(zhàn)。如何簡(jiǎn)化外部客戶(hù)程序和系統(tǒng)間的交互接口?如何將外部客戶(hù)程序的演化和內(nèi)部子系統(tǒng)的變化之間的依賴(lài)相互解耦?

二、意圖(Intent)

為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,F(xiàn)acade模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用?!     ?mdash;—《設(shè)計(jì)模式》GoF

三、結(jié)構(gòu)圖(Structure)

四、模式的組成

外觀模式包含如下兩個(gè)角色:
(1)、外觀角色(Facade):在客戶(hù)端可以調(diào)用它的方法,在外觀角色中可以知道相關(guān)的(一個(gè)或者多個(gè))子系統(tǒng)的功能和責(zé)任;在正常情況下,它將所有從客戶(hù)端發(fā)來(lái)的請(qǐng)求委派到相應(yīng)的子系統(tǒng)去,傳遞給相應(yīng)的子系統(tǒng)對(duì)象處理。
(2)、子系統(tǒng)角色(SubSystem):在軟件系統(tǒng)中可以有一個(gè)或者多個(gè)子系統(tǒng)角色,每一個(gè)子系統(tǒng)可以不是一個(gè)單獨(dú)的類(lèi),而是一個(gè)類(lèi)的集合,它實(shí)現(xiàn)子系統(tǒng)的功能;每一個(gè)子系統(tǒng)都可以被客戶(hù)端直接調(diào)用,或者被外觀角色調(diào)用,它處理由外觀類(lèi)傳過(guò)來(lái)的請(qǐng)求;子系統(tǒng)并不知道外觀的存在,對(duì)于子系統(tǒng)而言,外觀角色僅僅是另外一個(gè)客戶(hù)端而已。

五、外觀模式的具體實(shí)現(xiàn)

購(gòu)物的過(guò)程很復(fù)雜,但是我們?cè)谫?gòu)買(mǎi)的過(guò)程只需要選擇自己喜歡的商品,也可以加入購(gòu)物車(chē),最后點(diǎn)擊付款就完成了。其實(shí)這個(gè)過(guò)程沒(méi)有那么簡(jiǎn)單。我們下面就模仿一下購(gòu)買(mǎi)的過(guò)程吧。
購(gòu)買(mǎi)過(guò)程有幾點(diǎn)必須要做的事情:
1、身份驗(yàn)證安全,沒(méi)有認(rèn)證是無(wú)效用戶(hù)。
2、系統(tǒng)安全,檢查系統(tǒng)環(huán)境,防止注入、跨站和偽造等攻擊
3、網(wǎng)銀安全,檢查付款地址的有效性,檢查網(wǎng)關(guān)是否正常

/// <summary>
/// 不使用外觀模式的情況
/// 此時(shí)客戶(hù)端與三個(gè)子系統(tǒng)都發(fā)送了耦合,使得客戶(hù)端程序依賴(lài)與子系統(tǒng)
/// 為了解決這樣的問(wèn)題,我們可以使用外觀模式來(lái)為所有子系統(tǒng)設(shè)計(jì)一個(gè)統(tǒng)一的接口
/// 客戶(hù)端只需要調(diào)用外觀類(lèi)中的方法就可以了,簡(jiǎn)化了客戶(hù)端的操作
/// 從而讓客戶(hù)和子系統(tǒng)之間避免了緊耦合
/// </summary>
static void Main(string[] args)
{
    SystemFacade facade = new SystemFacade();
    facade.Buy();//用戶(hù)點(diǎn)擊購(gòu)買(mǎi)就完成了。
}


// 身份認(rèn)證子系統(tǒng)A
public class AuthoriationSystemA
{
    public void MethodA()
    {
        Console.WriteLine("執(zhí)行身份認(rèn)證");
    }
}

// 系統(tǒng)安全子系統(tǒng)B
public class SecuritySystemB
{
    public void MethodB()
    {
        Console.WriteLine("執(zhí)行系統(tǒng)安全檢查");
    }
}

// 網(wǎng)銀安全子系統(tǒng)C
public class NetBankSystemC
{
    public void MethodC()
    {
        Console.WriteLine("執(zhí)行網(wǎng)銀安全檢測(cè)");
    }
}

//更高層的Facade
public class SystemFacade
{
    private AuthoriationSystemA auth;
    private SecuritySystemB security;
    private NetBankSystemC netbank;

    public SystemFacade()
    {
        auth = new AuthoriationSystemA();
        security = new SecuritySystemB();
        netbank = new NetBankSystemC();
    }

    public void Buy()
    {
        auth.MethodA();//身份認(rèn)證子系統(tǒng)
        security.MethodB();//系統(tǒng)安全子系統(tǒng)
        netbank.MethodC();//網(wǎng)銀安全子系統(tǒng)

        Console.WriteLine("我已經(jīng)成功購(gòu)買(mǎi)了!");
    }
}

六、實(shí)現(xiàn)要點(diǎn):

1、一個(gè)系統(tǒng)可以有幾個(gè)門(mén)面類(lèi)
在門(mén)面模式中,通常只需要一個(gè)門(mén)面類(lèi),并且此門(mén)面類(lèi)只有一個(gè)實(shí)例,換言之它是一個(gè)單例類(lèi)。當(dāng)然這并不意味著在整個(gè)系統(tǒng)里只有一個(gè)門(mén)面類(lèi),而僅僅是說(shuō)對(duì)每一個(gè)子系統(tǒng)只有一個(gè)門(mén)面類(lèi)?;蛘哒f(shuō),如果一個(gè)系統(tǒng)有好幾個(gè)子系統(tǒng)的話,每一個(gè)子系統(tǒng)都有一個(gè)門(mén)面類(lèi),整個(gè)系統(tǒng)可以有數(shù)個(gè)門(mén)面類(lèi)。
2、為子系統(tǒng)增加新行為
初學(xué)者往往以為通過(guò)繼承一個(gè)門(mén)面類(lèi)便可在子系統(tǒng)中加入新的行為,這是錯(cuò)誤的。門(mén)面模式的用意是為子系統(tǒng)提供一個(gè)集中化和簡(jiǎn)化的溝通管道,而不能向子系統(tǒng)加入新的行為。比如醫(yī)院中的接待員并不是醫(yī)護(hù)人員,接待員并不能為病人提供醫(yī)療服務(wù)。
3、Facade有助于建立層次結(jié)構(gòu)的系統(tǒng),實(shí)現(xiàn)了子系統(tǒng)與客戶(hù)之間的松耦合關(guān)系,子系統(tǒng)內(nèi)部的功能組件往往是緊耦合的。松耦合關(guān)系使得子系統(tǒng)的組件變化不會(huì)影響到它的客戶(hù)。Facade消除了復(fù)雜的循環(huán)依賴(lài)關(guān)系。這一點(diǎn)在客戶(hù)程序與子系統(tǒng)分別實(shí)現(xiàn)的時(shí)候格外重要。
4、從客戶(hù)程序的角度來(lái)看,F(xiàn)acade模式不僅簡(jiǎn)化了整個(gè)組件系統(tǒng)的接口,同時(shí)對(duì)于組件內(nèi)部與外部客戶(hù)程序來(lái)說(shuō),從某種程度上也達(dá)到了一種“解耦”的效果——內(nèi)部子系統(tǒng)的任何變化不會(huì)影響到Facade接口的變化。

1、外觀模式的優(yōu)點(diǎn):

(1)、外觀模式對(duì)客戶(hù)屏蔽了子系統(tǒng)組件,從而簡(jiǎn)化了接口,減少了客戶(hù)處理的對(duì)象數(shù)目并使子系統(tǒng)的使用更加簡(jiǎn)單。
(2)、外觀模式實(shí)現(xiàn)了子系統(tǒng)與客戶(hù)之間的松耦合關(guān)系,而子系統(tǒng)內(nèi)部的功能組件是緊耦合的。松耦合使得子系統(tǒng)的組件變化不會(huì)影響到它的客戶(hù)。

2、外觀模式的缺點(diǎn):

如果增加新的子系統(tǒng)可能需要修改外觀類(lèi)或客戶(hù)端的源代碼,這樣就違背了”開(kāi)——閉原則“(不過(guò)這點(diǎn)也是不可避免)。

3、在以下情況下可以考慮使用外觀模式:

(1)、外一個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)簡(jiǎn)單的接口
(2)、提供子系統(tǒng)的獨(dú)立性
(3)、在層次化結(jié)構(gòu)中,可以使用外觀模式定義系統(tǒng)中每一層的入口。其中三層架構(gòu)就是這樣的一個(gè)例子。

七.NET 中外觀模式的實(shí)現(xiàn)

外觀模式在FCL里面運(yùn)用還是很多的,多數(shù)情況是單個(gè)類(lèi)的情況,在Asp.Net里面,有很多復(fù)合控件,比如:Login控件,可以登錄,可以認(rèn)證,可以保存登錄用戶(hù)信息。其實(shí),外觀模式更多的是應(yīng)用在業(yè)務(wù)系統(tǒng)當(dāng)中,效果更好。

到此這篇關(guān)于.Net結(jié)構(gòu)型設(shè)計(jì)模式之外觀模式(Facade)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 那些年,我還在學(xué)asp.net(一) 學(xué)習(xí)筆記

    那些年,我還在學(xué)asp.net(一) 學(xué)習(xí)筆記

    那些年到此,基本學(xué)習(xí)了前端的基本知識(shí),那些年的第四課就是asp.net,當(dāng)然那時(shí)看了很多教程,比如說(shuō):天轟穿,當(dāng)然天轟穿說(shuō)得比較多,如面向?qū)ο?,C#知識(shí),由于當(dāng)時(shí)上過(guò)C++,所以就沒(méi)有看這些,直接從asp.net開(kāi)始,主要是學(xué)習(xí)一下asp.net用到的一些基本控件
    2012-03-03
  • .Net行為型設(shè)計(jì)模式之迭代器模式(Iterator)

    .Net行為型設(shè)計(jì)模式之迭代器模式(Iterator)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之迭代器模式(Iterator),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • ASP.NET?Core托管模型CreateDefaultBuilder()方法

    ASP.NET?Core托管模型CreateDefaultBuilder()方法

    這篇文章介紹了ASP.NET?Core托管模型CreateDefaultBuilder()方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • .NET?Core使用flyfire.CustomSerialPort實(shí)現(xiàn)Windows/Linux跨平臺(tái)串口通訊

    .NET?Core使用flyfire.CustomSerialPort實(shí)現(xiàn)Windows/Linux跨平臺(tái)串口通訊

    本文詳細(xì)講解了.NET?Core使用flyfire.CustomSerialPort實(shí)現(xiàn)Windows/Linux跨平臺(tái)串口通訊的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • ASP.NET中 CheckBox復(fù)選框控件的使用

    ASP.NET中 CheckBox復(fù)選框控件的使用

    本文主要介紹ASP.NET中CheckBox復(fù)選框控件的使用,并舉例演示其用法,希望對(duì)大家有所幫助。
    2016-04-04
  • ASP.NET?Core命令行界面CLI用法

    ASP.NET?Core命令行界面CLI用法

    這篇文章介紹了ASP.NET?Core命令行界面CLI的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • ASP.NET?Core中的Configuration配置一

    ASP.NET?Core中的Configuration配置一

    這篇文章介紹了ASP.NET?Core中的Configuration配置,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • ASP.NET MVC中_ViewStart.cshtml作用介紹

    ASP.NET MVC中_ViewStart.cshtml作用介紹

    這篇文章介紹了ASP.NET MVC中_ViewStart.cshtml的作用,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • 創(chuàng)建ASP.NET?Core?Web應(yīng)用程序并介紹項(xiàng)目模板

    創(chuàng)建ASP.NET?Core?Web應(yīng)用程序并介紹項(xiàng)目模板

    這篇文章介紹了創(chuàng)建ASP.NET?Core?Web應(yīng)用程序的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • WPF中Style樣式及其觸發(fā)器

    WPF中Style樣式及其觸發(fā)器

    這篇文章介紹了WPF中Style樣式及其觸發(fā)器,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評(píng)論