面向对象方法的基本思想 面向对象设计思想是什么( 二 )


组合和继承的选择是一种权衡和选择 , 当涉及的类经常变化可能导致继承层级向着复杂化演化时 , 需要考虑采用组合的方式 , 如果相关类比较稳定 , 继承层级不深(一般不超过 3 层) , 就可以放心使用继承 。
在具体的模式中 , 组合模式、策略模式等就是使用组合的方式实现 , 模板模式使用的是继承方式实现 。
多态多态的字面意思就是同样的一个语法调用 , 能够表达多个不同的意思 。如果说继承的最大好处是复用 , 那么多态的好处就是方便扩展 。
在 C# 语言中两个比较典型的多态场景就是方法的重写和方法的重载:

  • 重写:存在继承关系的类或接口 , 在子类中对父类的方法进行重新构建逻辑 , 但调用方法、参数、返回值保持一致 , 通常有下面几种情况: 普通的父类中有用 virtual 关键字标识的虚方法 , 在子类中使用 override 关键字进行重写;子类对抽象类的抽象方法进行重写;子类对接口中的方法进行实现 。
  • 重载:类中的多个方法 , 方法名相同 , 但参数个数或类型不相同 , 称之为重载方法 。例如 C# 中的 File 类的 Open 方法就有三个重载 , 如下图:

面向对象方法的基本思想 面向对象设计思想是什么


方法的重写 , 在实际应用中非常常见 , 比如零代码平台中的消息组件会有多种发送消息的方式 , 下面用一个示例代码演示下:
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"));}}为什么说能提高扩展性呢?如果这时消息组件需要扩展发送短信的消息种类 , 只需要编写短信类型的消息类实现 IMessage 接口的 Send 方法即可 。
还有一种场景 , 比如登陆的时候 , 有基于用户名密码的认证、企业微信的认证、钉钉的认证、和对接第三方的认证 , 又应该怎么设计呢?
【面向对象方法的基本思想 面向对象设计思想是什么】我们虽然都在使用着面向对象的语言 , 但很多的时候思维还是面向过程的 , 具体体现在: