日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

面向?qū)ο蠓椒ǖ幕舅枷?面向?qū)ο笤O計思想是什么( 二 )


組合和繼承的選擇是一種權衡和選擇 , 當涉及的類經(jīng)常變化可能導致繼承層級向著復雜化演化時 , 需要考慮采用組合的方式 , 如果相關類比較穩(wěn)定 , 繼承層級不深(一般不超過 3 層) , 就可以放心使用繼承 。
在具體的模式中 , 組合模式、策略模式等就是使用組合的方式實現(xiàn) , 模板模式使用的是繼承方式實現(xiàn) 。
多態(tài)多態(tài)的字面意思就是同樣的一個語法調(diào)用 , 能夠表達多個不同的意思 。如果說繼承的最大好處是復用 , 那么多態(tài)的好處就是方便擴展 。
在 C# 語言中兩個比較典型的多態(tài)場景就是方法的重寫和方法的重載:

  • 重寫:存在繼承關系的類或接口 , 在子類中對父類的方法進行重新構建邏輯 , 但調(diào)用方法、參數(shù)、返回值保持一致 , 通常有下面幾種情況: 普通的父類中有用 virtual 關鍵字標識的虛方法 , 在子類中使用 override 關鍵字進行重寫;子類對抽象類的抽象方法進行重寫;子類對接口中的方法進行實現(xiàn) 。
  • 重載:類中的多個方法 , 方法名相同 , 但參數(shù)個數(shù)或類型不相同 , 稱之為重載方法 。例如 C# 中的 File 類的 Open 方法就有三個重載 , 如下圖:

面向?qū)ο蠓椒ǖ幕舅枷?面向?qū)ο笤O計思想是什么


方法的重寫 , 在實際應用中非常常見 , 比如零代碼平臺中的消息組件會有多種發(fā)送消息的方式 , 下面用一個示例代碼演示下:
public interface IMessage{void Send(string msg);}public class EmailMessage : IMessage{public void Send(string msg){Console.WriteLine($"send email message {msg}");}}public class WechatMessage : IMessage{public void Send(string msg){Console.WriteLine($"send wechat message {msg}");}}class Program{static void Main(string[] args){List<IMessage> messageList = new List<IMessage>();messageList.Add(new EmailMessage());messageList.Add(new WechatMessage());messageList.ForEach(s=>s.Send("test message"));}}為什么說能提高擴展性呢?如果這時消息組件需要擴展發(fā)送短信的消息種類 , 只需要編寫短信類型的消息類實現(xiàn) IMessage 接口的 Send 方法即可 。
還有一種場景 , 比如登陸的時候 , 有基于用戶名密碼的認證、企業(yè)微信的認證、釘釘?shù)恼J證、和對接第三方的認證 , 又應該怎么設計呢?
【面向?qū)ο蠓椒ǖ幕舅枷?面向?qū)ο笤O計思想是什么】我們雖然都在使用著面向?qū)ο蟮恼Z言 , 但很多的時候思維還是面向過程的 , 具體體現(xiàn)在: