方法的重写,在实际应用中非常常见,比如零代码平台中的消息组件会有多种发送消息的方式,下面用一个示例代码演示下:
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 方法即可。
还有一种场景,比如登陆的时候,有基于用户名密码的认证、企业微信的认证、钉钉的认证、和对接第三方的认证,又应该怎么设计呢?
我们虽然都在使用着面向对象的语言,但很多的时候思维还是面向过程的,具体体现在:
所以不要以为使用了面向对象的语言就是在使用面向对象编程,重要的是抽象的思维,这种抽象需要我们去思考,去全盘考虑,相比较面向过程显得更难,所以懒惰的程序员更容易写出面向过程的代码。
这些面向对象的基础知识是学习设计模式的根基,掌握基础知识,然后愿意去思考,所以才能够学习好设计模式,并将其应用到实际的工作中。下一篇将介绍面向对象中的常用设计原则,设计模式也都是基于这些设计原则演化而来。