当前位置: 技术问答>java相关
欢迎讨论DIP(赖倒转原则),我有一些不是很明白?
来源: 互联网 发布时间:2017-04-05
本文导语: 依赖于抽象而不依赖于具体实现。 如果依赖于抽象类型,当这个具体类型不用了,改为另一个类型,客户端就完全不知道具体类型已经有所变化。 我决的如果具体类已经变了,客户端也应该变化,回为java在instance时...
依赖于抽象而不依赖于具体实现。
如果依赖于抽象类型,当这个具体类型不用了,改为另一个类型,客户端就完全不知道具体类型已经有所变化。
我决的如果具体类已经变了,客户端也应该变化,回为java在instance时用的是new关键字。
例如:
变化前:
public interface IA {
}
public B implements IA {
}
//clinet
IA ia = new B();
变化后:
public C implements IA {
}
//clinet
IA ia = new C(); //这里客户端也变化了。
请大家解释一下?
如果依赖于抽象类型,当这个具体类型不用了,改为另一个类型,客户端就完全不知道具体类型已经有所变化。
我决的如果具体类已经变了,客户端也应该变化,回为java在instance时用的是new关键字。
例如:
变化前:
public interface IA {
}
public B implements IA {
}
//clinet
IA ia = new B();
变化后:
public C implements IA {
}
//clinet
IA ia = new C(); //这里客户端也变化了。
请大家解释一下?
|
在这里,客户端只有创建工作需要显式的与对象有关,而其它的操作都只与接口有关。当用不同的对象实现某个接口时,除了对象创建外,其它的代码不需要动,而创建的代码是最直接的。
如果真要强调客户端的透明性,用抽象工厂模式就可以不用知道任何要创建对象的细节,只需要用相应的参数传给工厂对象。
在实际应用中,不可能如此严格地遵循原则。把所有的原则都遵循了,什么软件都做不成。
如果真要强调客户端的透明性,用抽象工厂模式就可以不用知道任何要创建对象的细节,只需要用相应的参数传给工厂对象。
在实际应用中,不可能如此严格地遵循原则。把所有的原则都遵循了,什么软件都做不成。
|
很多时候并不是直接用new来得到新对象,可能是一个方法返回的结果呢?
比如:
IA ia = anotherObject.getTheImplentationOfA(someParameter);
想想在使用java.util包中的一些对象(Collection,Set)时,获取Iterator的情形。再想想如果java.util支持多种Iterator的实现,你的客户代码怎么变呢?
Merry Christmas&Have fun!
比如:
IA ia = anotherObject.getTheImplentationOfA(someParameter);
想想在使用java.util包中的一些对象(Collection,Set)时,获取Iterator的情形。再想想如果java.util支持多种Iterator的实现,你的客户代码怎么变呢?
Merry Christmas&Have fun!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。