再看“陈伟视频”理解多态机制 ——你还记得“橘子,苹果的例子么”

来源:互联网 发布:按键精灵免费网络验证 编辑:程序博客网 时间:2024/05/01 12:57

“接口你觉得是什么?”在我没有回复这集视频之前我会直接说解耦。为什么是解耦,可能我当时觉得只要在B层和D层中穿插一层,那么B层就不会直接调用D层的类的方法,这样子就达到了解耦的效果。后来我才发现了我敲代码的一个误区,那就是我在敲机房收费系统的时候仅仅按照七层的样式,每定义一个接口的时候就实现一个类,导致我的理解就是一个接口仅仅对应一个类。但是接口仅仅只是这样子的么?

    我想陈伟视频49集给了我一个很好的启发——多态。

 

【回顾】

 

有个只进不出的盒子,水果有两种苹果和香蕉,原始重量分别是50、30。放入盒中,水分丢失,重量减轻,分别减轻4、3,直到达到自身3/5不再轻。

盒子功能:

  1、一天前的总重量

  2、输出苹果数量

3、输出橘子数量

  4、输出一天盒中水果减轻的总重量

  5、当前的总重量

 

【分析】

 

从这个上面这个例子中我们可以通过领域模型来分析出来:

(一)用例和角色:

顾客(隐藏的角色),称总重(用例)


(二)模型

业务实体:顾客,盒子,苹果,香蕉,水果,

业务规则:1. 原始重量分别是50、30

          2. 每过一天分别减轻4、3,直到达到自身3/5不再轻。

关系:实现关系

(三)图分析

 

(原理)

 

(VB运行的时候

 

C#运行时候)

 

分析:

其实大家真的敲这段代码会发现,客户端有这一段专门实例化苹果和橘子的代码,这是为什么呢?因为在VB里面并没有真正的接口类,假如用抽象类当做接口类用的时候需要写一个转换的。但是当我们直接用C#或者其他敲的时候,水果直接做接口层,所以这个转换我们就不用写了,我们便可以直接通过水果接口类实现苹果或者橘子类的实例化使用。所以,c#在运行时候比原理更加接近——用户在使用的时候接口可以自动获取用户需要的类,所以用户在编译的时候不需要知道到底是苹果还是橘子,知道实例化接口类就好了。

【思考】

 

从上述例子中我们不难看到,盒子平时只需要调取水果接口,等到真正调用的时候才会自动根据你的输入的是苹果还是橘子来取得不同的结果。换而言之,通过水果接口的实现关系来实现苹果,橘子同一方法的不同实现。

多态的好处:不同的对象接受相同的东西产生不同的结果。这样子我们可以添加不同不同种类的水果而在使用的时候不必关心他们是哪个。

 

【反思】

 

很多人跟我反映说现在这个阶段对于多态还不是很了解,从视频我认识到凡是多问一个为什么,不要只是拿来用,也要知道这是什么,用来干什么的。

1 0
原创粉丝点击