在 Java / 架构、设计
依赖于抽象而不依赖于具体实现。
如果依赖于抽象类型,当这个具体类型不用了,改为另一个类型,客户端就完全不知道具体类型已经有所变化。
我决的如果具体类已经变了,客户端也应该变化,回为java在instance时用的是new关键字。
例如:
变化前:
public interface IA {
}
public B implements IA {
}
//clinet
IA ia = new B();
变化后:
public C implements IA {
}
//clinet
IA ia = new C(); //这里客户端也变化了。
请大家解释一下?
1.在这里,客户端只有创建工作需要显式的与对象有关,而其它的操作都只与接口有关。当用不同的对象实现某个接口时,除了对象创建外,其它的代码不需要动,而创建的代码是最直接的。
如果真要强调客户端的透明性,用抽象工厂模式就可以不用知道任何要创建对象的细节,只需要用相应的参数传给工厂对象。
在实际应用中,不可能如此严格地遵循原则。把所有的原则都遵循了,什么软件都做不成
2.很多时候并不是直接用new来得到新对象,可能是一个方法返回的结果呢? 比如: IA ia = anotherObject.getTheImplentationOfA(someParameter); 想想在使用java.util包中的一些对象(Collection,Set)时,获取Iterator的情形。再想想如果java.util支持多种Iterator的实现,你的客户代码怎么变呢?