锁定老帖子 主题:基础知识: 需求!
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-08-22
potian 写道 firebody,关于超类依赖于子类,或并行类之间的相互依赖这些问题我现在还没提出来,不过你说了也一样
我到现在还只是纯粹证明那个灵活性的问题 其实讨论了这么久,老说工厂来工厂去,我一直以为他ajoo会用一个factory来统一管理对象的产生,没想到最后表达的意思是在类里提供静态instance方法! 用静态instance方法替代公共构造函数。不知道,我的理解是否还是错ajoo的误。 |
|
返回顶楼 | |
发表时间:2004-08-22
potian 写道 ajoo,要依赖也应该是依赖接口,而不是依赖具体的实现,除非是在一个纯粹的工厂里面。
还是一个程度问题。 在这个依赖的问题上, 任何的极端都不对。 你的程序所有的依赖都改成接口组合? 你的程序不管什么模块之间都是直接依赖? 两个都不对。 |
|
返回顶楼 | |
发表时间:2004-08-22
是的,他的意思就是在自己类里面提供一个静态factory
|
|
返回顶楼 | |
发表时间:2004-08-22
potian 写道 ajoo,要依赖也应该是依赖接口,而不是依赖具体的实现,除非是在一个纯粹的工厂里面。
难道说道最后,又到讨论就他是否回去啃OCP,以及DIP上? |
|
返回顶楼 | |
发表时间:2004-08-22
firebody 写道 potian 写道 firebody,关于超类依赖于子类,或并行类之间的相互依赖这些问题我现在还没提出来,不过你说了也一样
我到现在还只是纯粹证明那个灵活性的问题 其实讨论了这么久,老说工厂来工厂去,我一直以为他ajoo会用一个factory来统一管理对象的产生,没想到最后表达的意思是在类里提供静态instance方法! 用静态instance方法替代公共构造函数。不知道,我的理解是否还是错ajoo的误。 呵呵。 我也没想到你一直那么确信地宣称我犯了错误A, B, 原来没有理解我在说什么。 不错, 从头至尾都是用静态工厂方法隐藏构造函数。 |
|
返回顶楼 | |
发表时间:2004-08-22
ajoo 写道 firebody, 耦合还是有个粒度问题的。不能走极端。完全没有耦合的程序是不存在的。
比如: class X{ void f();{... g();; ...} void g();; } 此处, f()就是紧紧耦合于g()的。你难道要把每个函数调用都ioc一下? 类之间的耦合也是。 有的就不应该耦合, 有的就无所谓。 不能一概而论。 比如你如果跟我说, TruePredicate的静态工厂不能直接调用LiteralPredicate, 我只能说你太极端了。 无话可说。 而且, 继承也是两个类直接紧紧耦合的,你用不用继承呢? potian,麻烦你帮我看看他的这段话,我没看懂!!! 引用 f()就是紧紧耦合于g()的 这种算什么咚咚?? |
|
返回顶楼 | |
发表时间:2004-08-22
potian 写道 ajoo,要依赖也应该是依赖接口,而不是依赖具体的实现,除非是在一个纯粹的工厂里面。
请告诉我你的代码里没有一个new。 new是依赖实现的。 |
|
返回顶楼 | |
发表时间:2004-08-22
引用 比如你如果跟我说, TruePredicate的静态工厂不能直接调用LiteralPredicate, 我只能说你太极端了。 无话可说。 而且, 继承也是两个类直接紧紧耦合的,你用不用继承呢? firebody ,我也认为ajoo这话有问题,我的理解是 不是说TruePredicate的静态工厂不能直接调用LiteralPredicate,是最好不要调用 继承是子类对父类的依赖 |
|
返回顶楼 | |
发表时间:2004-08-22
ajoo 写道 potian 写道 ajoo,要依赖也应该是依赖接口,而不是依赖具体的实现,除非是在一个纯粹的工厂里面。
请告诉我你的代码里没有一个new。 new是依赖实现的。 很累了◎ 不过还想说一下,具体的new自然是由工厂来new出来,这个new是直接new那个有公共构造函数的new,这个工厂是全局配置的工厂类, 不是你说的静态工厂方法! client端只跟这个工厂以及接口耦合 |
|
返回顶楼 | |
发表时间:2004-08-22
firebody 写道 这样的代码,我看着可怕
final class TruePredicate implements Predicate{ ...} 2 public bool eval(Object obj);{return true;} 3 private static final Predicate singleton = new TruePredicate();; 4 public static Predicate instance();{return singleton;} 5 } 假设这样一个极端一点的例子: public interface A{ public B getB();; oublic void setB(B b);; public C getC(); public void setC(C c);; public D getD();; pulbuic void setD(D d); } public AImpl implemens A{ private A(AB b,C c,D d,...);{ } public static instance();{ return this( BImpl.instance(); ,Cimpl.instance();,Dompli,instance();..);; 耦合这么紧密!难道还敢继续写代码下去???? 另外,你这个例子举的不好。既然构造函数里有AB, C, D, 我的东西会是: public AImpl implements A{ private A(AB b,C c,D d,...);{ } public static A instance(AB b, C c, D d, ...);{ return new AImpl( b, c, d, ...);; } }所谓的紧密耦合本来就是你用构造函数或者继承也避免不掉的。 鉴于你前面明显的看不明白问题就发言的前科, 还是友好建议你先象我一样一点一点问清楚了别人的真正意是什么再开始阐发。 |
|
返回顶楼 | |