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

“接口你认为是什么?”在我没有回复这集视频之前我会直接说解耦。为什么是解耦,可能我当时认为只要在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#执行时候)

 

分析:

事实上大家真的敲这段代码会发现,client有这一段专门实例化苹果和橘子的代码。这是为什么呢?由于在VB里面并没有真正的接口类,假如用抽象类当做接口类用的时候须要写一个转换的。

可是当我们直接用C#或者其它敲的时候,水果直接做接口层,所以这个转换我们就不用写了。我们便能够直接通过水果接口类实现苹果或者橘子类的实例化使用。所以,c#在执行时候比原理更加接近——用户在使用的时候接口能够自己主动获取用户须要的类,所以用户在编译的时候不须要知道究竟是苹果还是橘子,知道实例化接口类就好了。

【思考】

 

从上述样例中我们不难看到。盒子平时仅仅须要调取水果接口。等到真正调用的时候才会自己主动依据你的输入的是苹果还是橘子来取得不同的结果。

换而言之,通过水果接口的实现关系来实现苹果,橘子同一方法的不同实现。

多态的优点:不同的对象接受同样的东西产生不同的结果。这样子我们能够加入不同不同种类的水果而在使用的时候不必关心他们是哪个。

 

【反思】

 

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

posted @ 2017-05-26 20:34  yxysuanfa  阅读(178)  评论(0编辑  收藏  举报