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

C#設(shè)計(jì)模式之建造者模式生成器模式示例詳解

 更新時(shí)間:2022年08月16日 15:12:51   作者:李菜菜c  
這篇文章主要為大家介紹了C#設(shè)計(jì)模式之建造者模式生成器模式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

建造者模式(Builder Pattern)使用多個(gè)簡(jiǎn)單的對(duì)象一步一步構(gòu)建成一個(gè)復(fù)雜的對(duì)象。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。

建造者模式結(jié)構(gòu)

主要由四個(gè)核心角色組建而成分別為

  • 生成器(Builder):抽象產(chǎn)品生產(chǎn)步驟的方法。
  • 具體生成器(Concrete Builders):產(chǎn)品生產(chǎn)步驟方法的不同的具體實(shí)現(xiàn)。
  • 產(chǎn)品(Products):最終生成的對(duì)象。
  • 主管:(Director) 類定義調(diào)用構(gòu)造步驟的順序, 這樣你就可以創(chuàng)建和復(fù)用特定的產(chǎn)品配置。

結(jié)構(gòu)類圖

實(shí)例

使用建造者模式的時(shí)候,我們應(yīng)該先問(wèn)問(wèn)為什么要使用它?使用它能給我們帶來(lái)什么?當(dāng)你考慮足夠了,使用起來(lái)才會(huì)更加順暢。下面會(huì)講解一些實(shí)例來(lái)代入我是如何理解的,也希望能幫助大家更好的理解建造者模式!

電腦在我們?nèi)粘I钪惺欠浅3R?jiàn)的,它的核心組成是什么呢?CPU、主板、電源、內(nèi)存、硬盤等等,那么客戶端需要我們構(gòu)造出來(lái)一臺(tái)電腦,我們應(yīng)該如何實(shí)現(xiàn)呢?

static void Main(string[] args)
{
    Computer computer = new Computer();
    computer.SetCpu("cpu");
    computer.SetMainboard("主板");
    computer.SetPowerSupply("電源");
    computer.SetGraphicsCard("集成顯卡");
    computer.GetComputerInfo();
    Console.ReadLine();
}
public class Computer 
{
    private string _cpu;
    private string _mainboard;
    private string _powerSupply;
    private string _graphicsCard;
    public void SetCpu(string cup) 
    {
        _cpu = cup;
    }
    public void SetMainboard(string mainboard)
    {
        _mainboard = mainboard;
    }
    public void SetPowerSupply(string powerSupply)
    {
        _powerSupply = powerSupply;
    }
    public void SetGraphicsCard(string graphicsCard)
    {
        _graphicsCard = graphicsCard;
    }
    public void GetComputerInfo() 
    {
        Console.WriteLine($"電腦配置為Cpu:{_cpu},主板為:{_mainboard},電源為:{_powerSupply},顯卡為:{_graphicsCard}");
    }
}

大家都知道電腦有固態(tài)硬盤和機(jī)械硬盤之分,當(dāng)然需求也各異,畢竟現(xiàn)在顯卡偏貴,有大多數(shù)人選擇機(jī)械硬盤,有些愛(ài)玩游戲的就需要固態(tài)硬盤,針對(duì)需求我們?cè)跇?gòu)建電腦過(guò)程也會(huì)產(chǎn)生差異。

對(duì)于用戶來(lái)說(shuō)他只需要知道他要的東西(如帶固態(tài)硬盤電腦或者機(jī)械硬盤電腦),至于你的構(gòu)建過(guò)程用戶也不會(huì)太在乎。

在上述例子中客戶需要手動(dòng)去Set,如果需要Set的值過(guò)多,可能會(huì)導(dǎo)致用戶一些關(guān)鍵屬性少賦值,并且順序也是由用戶控制的,在某些環(huán)節(jié)出現(xiàn)問(wèn)題,就會(huì)導(dǎo)致電腦組裝不起來(lái)。

針對(duì)上述問(wèn)題,我們可以很容易的代入建造者模式,它能將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示!

使用建造者模式

通過(guò)上面一些表述,在構(gòu)建產(chǎn)品過(guò)程中是穩(wěn)定的,而具體的構(gòu)造細(xì)節(jié)是不一樣的有的需要固態(tài)硬盤,有的要機(jī)械硬盤等,那我們?nèi)绾问褂媒ㄔ煺吣J侥兀?/p>

// 建造者核心角色生成器
public interface IComputerBuilder
{
    void SetCpu(string cup);
    void SetMainboard(string mainboard);
    void SetPowerSupply(string powerSupply);
    void SetIsGraphicsCard(string graphicsCard);
}
// A電腦具體生成器(固態(tài)硬盤電腦)
public class AComputerBuilder : IComputerBuilder
{
    private Computer Computer;
    public AComputerBuilder() 
    {
        Computer = new Computer();
    }
    public Computer GetComputer()
    {
       return Computer;
    }
    public void SetCpu() => Computer.Cpu = "CPU";
    public void SetHardDisk() => Computer.HardDisk = "固態(tài)硬盤";
    public void SetMainboard() => Computer.Mainboard = "主板";
    public void SetPowerSupply() => Computer.PowerSupply = "電源";
}
// A電腦具體生成器(機(jī)械硬盤電腦)
public class BComputerBuilder : IComputerBuilder
{
    private Computer Computer;
    public BComputerBuilder()
    {
        Computer = new Computer();
    }
    public Computer GetComputer()
    {
        return Computer;
    }
    public void SetCpu() => Computer.Cpu = "CPU";
    public void SetHardDisk() => Computer.HardDisk = "機(jī)械硬盤";
    public void SetMainboard() => Computer.Mainboard = "主板";
    public void SetPowerSupply() => Computer.PowerSupply = "電源";
}
  • 通過(guò)了解建造者模式結(jié)構(gòu),我們需要引入主管(Director)概念類定義調(diào)用構(gòu)造步驟的順序。
public class Director 
{
    private IComputerBuilder ComputerBuilder;
    //客戶端代碼會(huì)創(chuàng)建生成器對(duì)象并將其傳遞給主管,然后執(zhí)行構(gòu)造過(guò)程。
    public Director(IComputerBuilder _ComputerBuilder) 
    {
        ComputerBuilder = _ComputerBuilder;
    }
    public Computer Build() 
    {
        ComputerBuilder.SetCpu();
        ComputerBuilder.SetMainboard();
        ComputerBuilder.SetPowerSupply();
        ComputerBuilder.SetHardDisk();
        return ComputerBuilder.GetComputer();
    }
}
  • 執(zhí)行結(jié)果

總結(jié)

使用建造者模式,可以將項(xiàng)目中復(fù)雜的構(gòu)建邏輯提取出來(lái),并且可以分布構(gòu)建。電腦這個(gè)產(chǎn)品的組成是一些固定的硬件,變得只是這些具體的硬件,比如需要構(gòu)建500W電源的電腦亦或者是750W的電腦,只需要繼承IComputerBuilder實(shí)現(xiàn)即可(可擴(kuò)展性)。

但是如果內(nèi)部復(fù)雜,可能會(huì)產(chǎn)生非常多的建造者類,無(wú)疑會(huì)產(chǎn)生非常多的類,代碼復(fù)雜度提高了。注意: 當(dāng)具體建造者只有一個(gè)的時(shí)候,主管(Director)完全可以省略掉。

以上就是C#設(shè)計(jì)模式之建造者模式生成器模式示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C#設(shè)計(jì)模式建造者模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Unity自定義編輯器界面(Inspector界面)

    Unity自定義編輯器界面(Inspector界面)

    這篇文章主要為大家詳細(xì)介紹了Unity自定義編輯器界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 詳解如何獲取C#類中發(fā)生數(shù)據(jù)變化的屬性信息

    詳解如何獲取C#類中發(fā)生數(shù)據(jù)變化的屬性信息

    這篇文章主要介紹了詳解如何獲取C#類中發(fā)生數(shù)據(jù)變化的屬性信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C#查看/寫入日志到Windows事件查看器的操作方法

    C#查看/寫入日志到Windows事件查看器的操作方法

    Windows 操作系統(tǒng)將與計(jì)算機(jī)的系統(tǒng)性能、應(yīng)用程序和安全方面相關(guān)的每個(gè)事件記錄在 C:\WINDOWS\system32\winevt 的日志中,事件查看器從這些原始事件日志中讀取信息,然后以可讀格式呈現(xiàn)信息,本文介紹了C#如何查看/寫入日志到Windows事件查看器,需要的朋友可以參考下
    2024-09-09
  • DevExpress的DateEdit設(shè)置顯示日期和時(shí)間的方法

    DevExpress的DateEdit設(shè)置顯示日期和時(shí)間的方法

    本文主要介紹了DevExpress的DateEdit設(shè)置顯示日期和時(shí)間的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換效果

    C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換效果

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • c#程序刪除自身代碼示例分享

    c#程序刪除自身代碼示例分享

    偶然看到一個(gè)可以自刪除的程序,于是了解下如何實(shí)現(xiàn)。然后整理如下,需要的朋友可以參考下
    2014-03-03
  • C# swagger ui增加訪問(wèn)限制方式

    C# swagger ui增加訪問(wèn)限制方式

    本文介紹了如何在C#中使用Swagger UI并增加訪問(wèn)限制,通過(guò)創(chuàng)建`SwaggerBasicAuthMiddleware`類和`MiddlewareExtension`類,并在`Startup.cs`的`Configure`方法中注入`app.UseSwaggerBasicAuth()`,從而實(shí)現(xiàn)對(duì)Swagger頁(yè)面的訪問(wèn)控制
    2025-02-02
  • C#實(shí)現(xiàn)給Word每一頁(yè)設(shè)置不同圖片水印

    C#實(shí)現(xiàn)給Word每一頁(yè)設(shè)置不同圖片水印

    Word中設(shè)置水印時(shí),可加載圖片設(shè)置為水印效果,但通常添加水印效果時(shí),會(huì)對(duì)所有頁(yè)面都設(shè)置成統(tǒng)一效果。本文將利用C#實(shí)現(xiàn)給Word每一頁(yè)設(shè)置不同圖片水印的效果,需要的可以參考一下
    2022-02-02
  • C#實(shí)現(xiàn)連接SQL Server2012數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句的方法

    C#實(shí)現(xiàn)連接SQL Server2012數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)連接SQL Server2012數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了C#連接SQL Server2012數(shù)據(jù)庫(kù)并執(zhí)行查詢、插入等操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-10-10
  • 輕松學(xué)習(xí)C#的運(yùn)算符

    輕松學(xué)習(xí)C#的運(yùn)算符

    輕松學(xué)習(xí)C#的運(yùn)算符,對(duì)C#的運(yùn)算符感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的運(yùn)算符
    2015-11-11

最新評(píng)論

桦甸市| 德惠市| 新龙县| 阿克| 峡江县| 嘉鱼县| 招远市| 怀宁县| 锦州市| 湾仔区| 霍城县| 德保县| 池州市| 花莲县| 通海县| 兴山县| 鸡东县| 玛曲县| 内乡县| 肃南| 海南省| 陵川县| 中西区| 晋中市| 威远县| 库尔勒市| 丹凤县| 崇阳县| 抚宁县| 勃利县| 神农架林区| 夏邑县| 台山市| 琼结县| 闻喜县| 勃利县| 定远县| 博兴县| 成武县| 瑞金市| 临泉县|