凡事都有例外-父类型依赖子类型
发布时间:2020-12-14 01:36:26 所属栏目:百科 来源:网络整理
导读:抛弃依赖倒置原则中,yqj2065对“抽象不应该依赖细节。细节应该依赖抽象”,描写成“一个毫无价值的废话,都能够包装成令很多人脑洞大开的原则”。 但是,凡事都有例外。 虽然极其罕见,有时候 父类型需要事先知道其子类型 。这是一种什么样的感觉呢? 我们
抛弃依赖倒置原则中,yqj2065对“抽象不应该依赖细节。细节应该依赖抽象”,描写成“一个毫无价值的废话,都能够包装成令很多人脑洞大开的原则”。 但是,凡事都有例外。 虽然极其罕见,有时候父类型需要事先知道其子类型。这是一种什么样的感觉呢? 我们看一个例子。定义自然数 package closure.style; public abstract class Num { @Override public String toString() { return "zero"; } } public final class Zero extends Num{} public final class NextOne extends Num{ Num pre;//predecessor NextOne(Num pre){ this.pre = pre; } @Override public String toString() { return "new " +NextOne.class.getSimpleName()+ "(" + pre + ")"; } } //class Demo public static void testNum() { Num n = new NextOne( new NextOne( new NextOne(new Zero()))); pln(n); }这样的设计很普通。 假设,我们不想要Zero这个类,而是将它设计成Num 的静态成员,就会在父类型中出现子类型的名字——父类型依赖子类型。 public abstract class Num { public static Num zero = new NextOne(null); }【有人说,你为什么不把zero作为NextOne的静态成员?哈,如果那样,怎么体现父类型依赖子类型呢,那不是没得玩了。】 父类型需要事先知道其子类型,的确是一个糟糕的设计体验。如果还和违反LSP搞在一起,就更糟糕。 但是,在特定情况下,这种搞法是没有办法的办法。 (作业题:请举出一个非常典型的例子。提示:WCF) (放在4.1.1)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |