我正在经历一个例子,我不确定他们为什么要这样做。 他们正在使用IEmailSender设置mySender ....
IEmailSender mySender = new MyEmailSender();
为什么不写
MyEmailSender mySender = new MyEmailSender();
因为MyEmailSender已经有IEmailSender接口参考
答案 0 :(得分:2)
稍后在代码中他们可以写
mySender = new MyNewEmailSender();
如有必要。但这不一定是对或错。他们只是试图指出一点,mySender
是一个IEmailSender
,无论实施如何。
答案 1 :(得分:2)
很多原因,一个是如果你针对IEmailSender
界面进行编程,后来决定你想要MyEvenBetterEmailSender
,你只需更改一行代码!
另一个是它允许你做"解耦"来自特定实现的代码,甚至可能注入而不是在程序中对其进行硬编码。
在维基百科上的interface-based programming上阅读更多内容。