我正在通过一个示例,但我不确定他们为什么要这样做。他们正在将 mySender 设置为 IEmailSender....
IEmailSender mySender = new MyEmailSender();
为什么不写
MyEmailSender mySender = new MyEmailSender();
因为 MyEmailSender 已经有 IEmailSender 接口参考
我正在通过一个示例,但我不确定他们为什么要这样做。他们正在将 mySender 设置为 IEmailSender....
IEmailSender mySender = new MyEmailSender();
为什么不写
MyEmailSender mySender = new MyEmailSender();
因为 MyEmailSender 已经有 IEmailSender 接口参考
稍后在他们可以编写的代码中
mySender = new MyNewEmailSender();
如有必要。但这不一定是对或错。他们只是想表达一个观点,mySender
不管IEmailSender
实施如何。
原因有很多,一个是如果你对IEmailSender
接口编程,后来又决定MyEvenBetterEmailSender
改用你,你只需要更改一行代码!
另一个是它允许您将代码与特定实现“分离”,甚至可以将其注入而不是在程序中硬编码。
在 Wikipedia上阅读有关基于接口的编程的更多信息。