一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C# 設計模式系列教程-建造者模式

C# 設計模式系列教程-建造者模式

2021-11-23 15:14Wang Juqiang C#

用戶只需要指定要建造的類型就可以得到它們,而具體的建造過程和細節不需要知道。

1. 概述

  將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表示,這樣的設計模式被稱為建造者模式。

2. 建造者模式中的角色

  2.1 建造者(builder):為創建一個產品對象的各個部件指定抽象接口。
  2.2 具體建造者(concretebuilder):實現builder的接口以構造和裝配該產品的各個部件,定義并明確它所創建的表示,并 提供一個檢索產品的接口。
  2.3 指揮者(director):指揮并構造一個使用builder接口的對象。
  2.4 產品(product):表示被構造的復雜對象。concretebuilder創建該產品的內部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的接口。

3. 實例:創建一個人,這個人可以有不同的特點,可以是胖子,可以是瘦子,可以是高個子,也可以是矮個子。

  3.1 以下是這個實例的類圖,以及對類圖的解讀。

C# 設計模式系列教程-建造者模式

  3.2 代碼實現及解讀:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// 要建造的產品
public class person
{
  public string head { get; set; }
  public string body { get; set; }
  public string arm { get; set; }
  public string leg { get; set; }
}
 
// 定義創建者接口,實現者必須實現該接口中定義的所有抽象方法,防止實現者疏忽而遺漏某個部件的創建
public abstract class builder
{
  protected person person { get; set; }
  public builder()
  {
    person = new person();
  }
 
  // 建造頭
  public abstract void buildhead();
  // 建造身體
  public abstract void buildbody();
  // 建造胳膊
  public abstract void buildarm();
  // 建造腿
  public abstract void buildleg();
 
  // 返回生成好的對象,這是一個具體方法,每個子類都可以使用它來返回一個已經創建成功的對象
  public person getperson()
  {
    return person;
  }
}
 
// 建造者的具體實現,這里是要建造出一個瘦子
public class thinpersonbuilder : builder
{
  public thinpersonbuilder()
  {
    person = new person();
  }
 
  public override void buildhead()
  {
    person.head = "瘦子的腦袋";
  }
 
  public override void buildbody()
  {
    person.body = "瘦子的身體";
  }
 
  public override void buildarm()
  {
    person.arm = "瘦子的胳膊";
  }
 
  public override void buildleg()
  {
    person.leg = "瘦子的腿";
  }
 
}
 
// 建造者的具體實現,這里是要建造出一個胖子
public class fatpersonbuilder : builder
{
  public override void buildhead()
  {
    person.head = "胖子的腦袋";
  }
 
  public override void buildbody()
  {
    person.body = "胖子的身體";
  }
 
  public override void buildarm()
  {
    person.head = "胖子的胳膊";
  }
 
  public override void buildleg()
  {
    person.head = "胖子的腿";
  }
}
 
// 建造者模式中的指揮者
public class persondirector
{
  builder builder;
  public persondirictor(builder personbuilder)
  {
    builder = personbuilder;
  }
 
  // 指揮創建一個人的過程,并返回創建成功的產品
  public person buildperson()
  {
    builder.buildhead();
    builder.buildbody();
    builder.buildarm();
    builder.buildleg();
 
    return builder.getperson();
  }
}

4. 模式總結

  4.1 優點

    4.1.1 用戶只需要指定要建造的類型就可以得到它們,而具體的建造過程和細節不需要知道。
    4.1.2 建造代碼與表示相分離,如果要改變一個產品的內部表示,只要再定義一個新的具體的建造者就可以了。
    4.1.3 建造過程由指揮者來控制,建造細節由一個抽象類來控制,對于實現建造細節的具體類來說,不會遺漏某一個步驟。

  4.2 缺點

    以上例子說明,現在我要增加產品的一個細節,如把創建腳的過程也添加進來,看我們需要改哪些類。buider,fatpersonbuilder,thinpersonbuilder(甚至更多,如果你實現了tallpersonbuilder,shortpersonbuilder等),persondirector,我們對修改也就開放了。

  4.3 實用范圍
    4.3.1 當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。

    4.3.2 當復雜對象的部件相對穩定,不會發生變化時

以上就是本文的全部內容,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
主站蜘蛛池模板: 精品国产人成亚洲区 | 精品一区二区三区视频日产 | 女仆色在线观看 | 第一福利在线视频 | 亚洲高清在线视频 | 亚洲AV无码一区二区三区乱子伦 | 精品卡1卡2卡三卡免费网站 | 亚洲国产综合网 | 国产精品久久久久这里只有精品 | 国产亚洲视频在线 | 亚洲日本va午夜中文字幕 | 色综合综合色 | 国产真实乱子伦xxxxchina | 91传媒制片厂制作传媒破解版 | 天天操天天射天天爽 | 亚洲精品国产在线 | 波多洁野衣一二区三区 | 午夜五月天 | 精品一区二区三区自拍图片区 | 国产精品免费精品自在线观看 | 国产在线欧美日韩精品一区二区 | 无遮挡h肉动漫在线观看电车 | 极品ts赵恩静和直男激战啪啪 | 红楼梦黄色小说 | 小SAO货叫大声点妓女 | 俺去俺来也www色官网免费的 | 日本公与妇中文在线 | 成人免费福利网站在线看 | 好姑娘在线完整版视频 | 调教女高中生第3部分 | 小草高清视频免费直播 | 成人黄色a级片 | 欧美日韩高清观看一区二区 | 女黑人尺寸bbb | 精品国产一区二区三区在线观看 | 亚洲网红精品大秀在线观看 | 大肥婆丰满大肥奶bbw肥 | 日本高清中文字幕视频在线 | 国产一区风间由美在线观看 | 欧美一级特黄特色大片免费 | 国产一卡二卡3卡4卡四卡在线 |