最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.Net結構型設計模式之外觀模式(Facade)

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

一、動機(Motivate)

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

二、意圖(Intent)

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

三、結構圖(Structure)

四、模式的組成

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

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

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

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


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

// 系統(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)銀安全檢測");
    }
}

//更高層的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();//身份認證子系統(tǒng)
        security.MethodB();//系統(tǒng)安全子系統(tǒng)
        netbank.MethodC();//網(wǎng)銀安全子系統(tǒng)

        Console.WriteLine("我已經(jīng)成功購買了!");
    }
}

六、實現(xiàn)要點:

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

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

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

2、外觀模式的缺點:

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

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

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

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

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

到此這篇關于.Net結構型設計模式之外觀模式(Facade)的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • WPF控件模板與其觸發(fā)器

    WPF控件模板與其觸發(fā)器

    這篇文章介紹了WPF控件模板與其觸發(fā)器,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • Asp.Net 不同的OnClick事件區(qū)別小結(onserverclick,onclientclick)

    Asp.Net 不同的OnClick事件區(qū)別小結(onserverclick,onclientclick)

    下面以 HTML的按鈕( system.web.ui.htmlcontrols ) 和 ASP.NET服務端按鈕 ( system.web.ui.webcontrols ) 為例
    2012-05-05
  • asp.net 專業(yè)源代碼打包工具

    asp.net 專業(yè)源代碼打包工具

    我想很多人都在網(wǎng)上下載過一些示例代碼,或者收到一些別人給的示例代碼。通常為了方便,都是打成一個壓縮包的形式
    2012-03-03
  • .Net?Core中使用MongoDB搭建集群與項目實戰(zhàn)

    .Net?Core中使用MongoDB搭建集群與項目實戰(zhàn)

    本文詳細講解了.Net?Core中使用MongoDB搭建集群與項目實戰(zhàn),對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02
  • ASP.Net Core MVC基礎系列之服務注冊和管道

    ASP.Net Core MVC基礎系列之服務注冊和管道

    這篇文章介紹了ASP.Net Core MVC中的服務注冊和管道,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02
  • WPF布局及布局容器介紹

    WPF布局及布局容器介紹

    這篇文章介紹了WPF布局及布局容器,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • C#聲明方法實例說明

    C#聲明方法實例說明

    方法(Method)是一個已命名的語句集。如果以前使用過其他編程語言,如C或Visual Basic等,就可以將方法視為函數(shù)或者子程序相似的東西。每個方法都有一個名稱和一個主體。方法名應該是一個有意義的標識符,它應描述出方法的用途(如CalculateIncomeTax)。方法主體包含了調用方法時實際執(zhí)行的語句。你可以為大多數(shù)方法提供一些數(shù)據(jù)來進行處理,并讓它返回一些信息(通常是處理結果)。方法是一種基本的、功能強大的編程機制。
    2008-04-04
  • .NET設計模式之UML類圖介紹

    .NET設計模式之UML類圖介紹

    這篇文章介紹了.NET設計模式之UML類圖,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • ASP.NET?Core中HttpContext詳解與使用

    ASP.NET?Core中HttpContext詳解與使用

    這篇文章介紹了ASP.NET?Core中HttpContext詳解與使用,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • ASP.NET Core服務生命周期

    ASP.NET Core服務生命周期

    這篇文章介紹了ASP.NET Core中的服務生命周期,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論

洮南市| 依安县| 黎平县| 石嘴山市| 彰武县| 增城市| 泰和县| 修文县| 西宁市| 大余县| 临高县| 华亭县| 滨海县| 屯昌县| 陇南市| 靖西县| 色达县| 中牟县| 河北省| 咸阳市| 库尔勒市| 崇信县| 南宫市| 逊克县| 上杭县| 五大连池市| 囊谦县| 垦利县| 祁东县| 建瓯市| 城市| 揭东县| 临朐县| 商都县| 松原市| 富源县| 温宿县| 海安县| 清河县| 祁连县| 突泉县|