加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

凡事都有例外-父类型依赖子类型

发布时间: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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读