中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

C#設計模式之組合-創新互聯

IronMan之組合

10多年的裕民網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都營銷網站建設的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整裕民建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“裕民網站設計”,“裕民網站推廣”以來,每個客戶項目都認真落實執行。

在上個篇幅中講到怎么把“武器”裝飾到“部件”上,這個篇幅呢,還是要講到“武器”,不過呢是關于“武器”使用的。

本篇介紹"武器"的合理使用方式,不說廢話,直接來看起初使用遇到的問題:

一起來看一下“武器”的定義:

 1     public abstract class WeaponUpgradeLevel1 
 2     { 
 3         protected List<WeaponUpgradeLevel1> weaponUpgrades=new List<WeaponUpgradeLevel1>(); 
 4  
 5         public List<WeaponUpgradeLevel1> WeaponUpgrades 
 6         { 
 7             get 
 8             { 
 9                 return weaponUpgrades;
 10             }
 11 
 12         }
 13         /// <summary>
 14         /// 判斷是“部分”對象 還是 “整體”對象
 15         /// </summary>
 16         public bool IsSingle
 17         {
 18             get
 19             {
 20                 if (weaponUpgrades.Count > 0)
 21                 {
 22                     return false;
 23                 }
 24                 else
 25                 {
 26                     return true;
 27                 }
 28             }
 29         }
 30         /// <summary>
 31         /// ***
 32         /// </summary>
 33         public abstract void Attack();
 34         /// <summary>
 35         /// 添加    “部分”對象或者是“整體”對象      到“整體”對象
 36         /// </summary>
 37         /// <param name="weaponupgrade"></param>
 38         /// <returns></returns>
 39         public virtual bool Add(WeaponUpgradeLevel1 weaponupgrade)
 40         {
 41             if (weaponupgrade != null)
 42             {
 43                 WeaponUpgrades.Add(weaponupgrade);
 44                 return true;
 45             }
 46             else { return false; }
 47 
 48         }
 49         /// <summary>
 50         /// 從“整體”對象中移除 “部分”對象或者是“整體”對象
 51         /// </summary>
 52         /// <param name="weaponupgrade"></param>
 53         /// <returns></returns>
 54         public virtual bool Remove(WeaponUpgradeLevel1 weaponupgrade)
 55         {
 56             if (weaponupgrade != null)
 57             {
 58                 if (WeaponUpgrades.Contains(weaponupgrade))
 59                 {
 60                     WeaponUpgrades.Remove(weaponupgrade);
 61                     return true;
 62                 }
 63                 else
 64                 {
 65                     return false;
 66                 }
 67             }
 68             else { return false; }
 69         }
 70     }
 71     public class Rocket : WeaponUpgradeLevel1
 72     {
 73         private string _name = "火箭炮";
 74 
 75         public override void Attack()
 76         {
 77             Console.WriteLine("使用" + _name + "進行***");
 78         }
 79     }
 80     public class RocketLevel1 : WeaponUpgradeLevel1
 81     {
 82         private string _name = "火箭炮(EX.2X2)";//由四個火箭炮組成
 83 
 84         public override void Attack()
 85         {
 86            Console.WriteLine("使用"+_name+"進行***");
 87         }
 88     }

上面定義了三種類型,WeaponUpgradeLevel1是“武器”的抽象,并且在其中定義了一些屬性和方法,

用于表示實現了此“武器”抽象的類型是否是核心武器(部分)還是核心武器的外殼(整體),

并且也在后面實現了“武器”抽象,分別是Rocket核心武器(部分)和RocketLevel1核心武器的外殼(整體),這樣的結構定義好了過后,我們來看一下子,怎么使用它們:

 1 WeaponUpgradeLevel1 weaRocket1 = new Rocket(); 
 2 WeaponUpgradeLevel1 weaRocket2 = new Rocket();            
 3 WeaponUpgradeLevel1 weaRocket3 = new Rocket();           
 4 WeaponUpgradeLevel1 weaRocket4 = new Rocket(); 
 5  
 6 WeaponUpgradeLevel1 weaRocketlevel1 = new RocketLevel1(); 
 7 weaRocketlevel1.Add(weaRocket1); 
 8 weaRocketlevel1.Add(weaRocket2); 
 9 weaRocketlevel1.Add(weaRocket3);
 10 weaRocketlevel1.Add(weaRocket4);

這時候 weaRocketlevel1示例是像圖1這樣的:

圖1

C#設計模式之組合

圖2

C#設計模式之組合

要是使用weaRocketlevel1,真正的目的不是使用它本身,而是使用它里面的小火箭炮(也就是weaRocket1……)。 如果想要使用里面的小火箭炮,并不是簡簡單單的遍歷一下就可以了,從現在的情況來看,確實是很簡單的遍歷

,獲取到每個火箭炮,并且使用它們, 但是如果這個"火箭炮(EX.2X2)"改成了"火箭炮(EX.8X8)"呢? 并且"火箭炮(EX.8X8)"是由 4個"火箭炮(EX.4X4)"組成,每個"火箭炮(EX.4X4)"是由4個"火箭炮(EX.2X2)"組成的。 在這樣的情況下怎么辦? 沒錯了,是使用遞歸來遍歷,然后的情況就是如圖3所示:

圖3

C#設計模式之組合

這樣來看,也確實沒什么大問題,只是耦合度比較高。
使用設計模式可以在特定的情況下解耦,這里的情況比較適合Composite模式。

將對象組合成樹形結構以表示“部分-整體”的層次結構。Composite模式使得用戶對單個對象和組合

對象的使用具有一致性。                                               

               [GOF 《設計模式》]

根據設計的中心思想,看一下修改后的結構:

  1     public abstract class WeaponUpgradeLevel1  
  2     {  
  3         protected List<WeaponUpgradeLevel1> weaponUpgrades=new List<WeaponUpgradeLevel1>();  
  4   
  5         public List<WeaponUpgradeLevel1> WeaponUpgrades  
  6         {  
  7             get  
  8             {  
  9                 return weaponUpgrades; 
  10             } 
  11  
  12         } 
  13         /// <summary> 
  14         /// 判斷是“部分”對象 還是 “整體”對象。 
  15         /// true為“部分”對象 反之相對 
  16         /// </summary> 
  17         public bool IsSingle 
  18         { 
  19             get 
  20             { 
  21                 if (weaponUpgrades.Count > 0) 
  22                 { 
  23                     return false; 
  24                 } 
  25                 else 
  26                 { 
  27                     return true; 
  28                 } 
  29             } 
  30         } 
  31         /// <summary> 
  32         /// *** 
33         /// </summary> 
34         public virtual void Attack() 
35         { 
36             ActionAttack(this); 
37         } 
38         private void ActionAttack(WeaponUpgradeLevel1 weaponupgrade) 
39         { 
40             if (weaponupgrade.IsSingle) 
41             { 
42                 weaponupgrade.Attack(); 
43             } 
44             else 
45             { 
46                 foreach (WeaponUpgradeLevel1 weapon in weaponupgrade.WeaponUpgrades) 
47                 { 
48                     ActionAttack(weapon); 
49                 } 
50             } 
51         } 
52         /// <summary> 
53         /// 添加    “部分”對象或者是“整體”對象      到“整體”對象 
54         /// </summary> 
55         /// <param name="weaponupgrade"></param> 
56         /// <returns></returns> 
57         public virtual bool Add(WeaponUpgradeLevel1 weaponupgrade) 
58         { 
59             if (weaponupgrade != null) 
60             { 
61                 WeaponUpgrades.Add(weaponupgrade); 
62                 return true; 
63             } 
64             else { return false; } 
65  
66         } 
67         /// <summary> 
68         /// 從“整體”對象中移除 “部分”對象或者是“整體”對象 
69         /// </summary> 
70         /// <param name="weaponupgrade"></param> 
71         /// <returns></returns> 
72         public virtual bool Remove(WeaponUpgradeLevel1 weaponupgrade) 
73         { 
74             if (weaponupgrade != null) 
75             { 
76                 if (WeaponUpgrades.Contains(weaponupgrade)) 
77                 { 
78                     WeaponUpgrades.Remove(weaponupgrade); 
79                     return true; 
80                 } 
81                 else 
82                 { 
83                     return false; 
84                 } 
85             } 
86             else { return false; } 
87         } 
88     } 
89     public class Rocket : WeaponUpgradeLevel1 
90     { 
91         private string _name = "火箭炮"; 
92  
93         public override void Attack() 
94         { 
95             Console.WriteLine("使用" + _name + "進行***"); 
96         } 
97     } 
98     public class RocketLevel1 : WeaponUpgradeLevel1 
99     {
100         private string _name = "火箭炮(EX.2X2)";//由四個火箭炮組成
101 
102         public override void Attack()
103         {
104            base.Attack();
105            Console.WriteLine("使用"+_name+"進行***");
106         }
107     }

看一下現在的客戶端怎么使用“火箭炮”:

 1 WeaponUpgradeLevel1 weaRocket1 = new Rocket(); 
2 WeaponUpgradeLevel1 weaRocket2 = new Rocket(); 
3 WeaponUpgradeLevel1 weaRocket3 = new Rocket(); 
4 WeaponUpgradeLevel1 weaRocket4 = new Rocket(); 
5 WeaponUpgradeLevel1 weaRocketlevel1 = new RocketLevel1(); 
6 weaRocketlevel1.Add(weaRocket1); 
7 weaRocketlevel1.Add(weaRocket2); 
8 weaRocketlevel1.Add(weaRocket3); 
9 weaRocketlevel1.Add(weaRocket4);
10 weaRocketlevel1.Attack();

所示結果如圖4

圖4

C#設計模式之組合

根據設計模式的思想修改代碼的區別是在“武器”抽象中把對“核心武器”的使用做了統一的使用。意思就不做闡述了可以自己理解理解。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前題目:C#設計模式之組合-創新互聯
新聞來源:http://m.2m8n56k.cn/article24/dsigje.html

成都網站建設公司_創新互聯,為您提供網站營銷網站策劃品牌網站設計定制開發品牌網站建設微信小程序

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發
主站蜘蛛池模板: 国产17部性孕妇孕交在线 | 亚洲欧美精品一区天堂久久 | 国产午夜精品久久理论片小说 | 日本s色大片在线观看 | 最新在线精品国自拍视频 | 日本特黄aaaaaaa大片 | 精品欧美日韩一区二区 | 精品在线观看国产 | 91亚洲精品久久91 | 亚洲精品日韩一区二区 | 国产欧美久久精品 | 国产高清在线精品一区在线 | 另类视频欧美 | 成人在线精品视频 | 免费的特黄特色大片在线观看 | 久久久久久亚洲精品 | 国产系列 视频二区 | 久草资源在线观看 | 国内国产真实露脸对白 | 精品三级内地国产在线观看 | 国产aaaaa一级毛片 | 顶级毛片在线手机免费看 | 中文字幕综合在线 | 亚洲在线国产 | 国产女人伦码一区二区三区不卡 | 国产精品日本一区二区不卡视频 | 欧美国产在线观看 | 嫩草一区二区三区四区乱码 | 国产精品二区三区 | 国产日产欧美精品一区二区三区 | 玖玖色视频 | 日本无遮 | 91久久国产露脸精品 | 毛茸茸年轻成熟亚洲人 | 午夜在线亚洲 | 5级做人爱c视版免费视频 | 国产真实乱子伦xxxxchina | 国产成人久久精品二区三区牛 | 手机看片午夜 | 国产手机在线视频 | 韩国美女毛片 |