越抽象,越能拓展

越抽象,越能拓展

最近自己在看商业项目源码的时候感受良多,故发点自己的小感悟做记录。先说结论:为了更好的拓展性,多使用 抽象类 和 接口。

接口和抽象类,二者区别在于:抽象类可以继承 正常的类,接口只能 继承 接口。所以在需要继承 类 的时候再用抽象类,不然就都可以用接口,简洁快捷

接口 相比于 抽象类,更为简洁和抽象。抽象类 可以 拥有 字段,但是 接口不行,接口 只能允许 函数 的声明 和 属性 (语法糖,我认为本质上还是函数)的声明。所以 对于接口 ,与其看作是一种 “更简洁的抽象类“,不如把他看作是 和声明实现该接口的对象订立一个必须实现哪些行为的契约

接口里可以声明函数 这点没问题,但是如果想要在其中添加 类似 字段 这样的内容,有无办法?有的,就是使用 属性。先使用属性提前告知 这个接口 会有这个类型的 ”字段“,然后到具体实现的时候,把 具体的字段写到属性中 Return 回去 就 OK 了。

在这里插入图片描述

如上图,我希望 IPanelProperties 里真的有一个 ”字段“,那么我就写一个属性,承诺这里以后可能能返回对应的字段
在这里插入图片描述

如上图,在后续实现的时候,把 private 类型的实际的字段 通过 属性 Return 了过去,实现了字段可读,且完成了一开始的承诺

为什么越抽象,拓展性就越好呢?因为在实际的构建过程中,抽象的东西往往是一个框架最为本质 和 核心的东西。在书写根基的时候多用抽象类和接口,去除多余的内容物,把最主要最本质的逻辑框架给搭上。那么在后续拓展的时候,只要拓展的东西是继承自 抽象类 和 接口 的,那么根基的代码就能跑,整个框架就稳定。

对于 泛型 也是有相似之处。抽象类 和 接口 所提供的拓展性 是针对于 某一类物体 的后续拓展(比如一个抽象生物体 后续可以拓展成 各种动物,敌人,NPC),而 泛型 则是在 运用这些抽象物体时的做法 上提供拓展性。在这里插入图片描述

如上图,如果用的不是泛型 而是 直接用了 IWindowProperties 的话,后续下面的代码的 Props 部分只能按照 IWindowProperties 的承诺去 写,万一 我的 Props 是新的东西,他也无法接收。所以这里用的是 泛型,意思是 这里的 Props 肯定是未来被拓展了的 Props,以后抽象类被继承的时候,别人也可以直接使用 最新的 Props 而非最古老的Props

很多东西如果写死了,那么拓展性就是会很差。所以在保持基础逻辑的前提下尽可能的抽象,越抽象,拓展性的越高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值