C#进阶之面向接口编程
Tips:
此篇文章着重讲述面向接口编程的代码搭建方式,至于原理以及一些基础知识可以参照这篇文章:面向接口编程思想基础
那么,让我们开始吧~
假设您准备研发一个moba类游戏(类似英雄联盟或者王者荣耀)。每个人物都必须包含两个字段:名字和人物类型,两个方法:介绍自己的性格和释放技能。
为了体现面向对象思想,我们需要做的第一步应该是为每个人物都设计一个独立的类,代码如下:
![](https://img.haomeiwen.com/i15846013/ae0acacb8649a45b.png)
![](https://img.haomeiwen.com/i15846013/b41e4c18a391fd4f.png)
有了这两个类我们就可以叫人物模拟一些场景啦,比如叫他们自我介绍.
于是你可能会写出以下代码和运行结果:
![](https://img.haomeiwen.com/i15846013/c7a63146d3e1d142.png)
嗯。。。看起来似乎没什么问题。
但如果我先有了第三个人物,那该怎么办呢?
除了重新写个人物类以外,还得在main方法里面重新实例化以及调用一次。
但是LOL可以是一百多个英雄!如果全部都要做自我介绍的话岂不是得在main方法里面实例化以及调用一百次?
于是我们可以开始考虑使用接口了。
至于好处我先不说,先看代码。
因为每个英雄都包含了固有的两个字段和两个方法,所以我们可以写个接口来限定它。
![](https://img.haomeiwen.com/i15846013/0404613ca7bb2b27.png)
然后我们的每个英雄类都去继承这个接口
![](https://img.haomeiwen.com/i15846013/b8b3843b6a1fcf60.png)
![](https://img.haomeiwen.com/i15846013/32bc889e8973ade9.png)
核心代码警告
再来个自我介绍的方法:
![](https://img.haomeiwen.com/i15846013/4b68e3e268d4ffa6.png)
于是乎,我们的main方法就被简化成了这样:
![](https://img.haomeiwen.com/i15846013/f73ad1e201908842.png)
两种方式的差异就显而易见了吧。
在使用了面向接口的编程方式后,我们如果要新增一个任务,就只需要写个人物的类来继承我们的IHeros接口,然后在Main里面调用一下。不管以后需要新增多少个人物,都是一样的简单。
但是使用第一种方式的话,我们就需要在Main写非常多的冗余代码。
而且万一以后我们需要给英雄们新增加一个方法(比如跳一段舞)的话,我们就需要手动去修改所有的英雄类,英雄类多了之后难免会漏掉那么百分之一二,更恐怖的是我们需要挨个修改main方法里面的逻辑。
而面向接口的编程方式很好地解决了这个问题。
如果我们现在又一百个英雄都需要新增跳舞的方法。我只需要在IHeros接口里新增一个跳舞的方法:
![](https://img.haomeiwen.com/i15846013/57290dac83b401d2.png)
然后我所有的英雄类都会报这个错误:
![](https://img.haomeiwen.com/i15846013/db0e704d53c88457.png)
这样可以完美地防止在修改英雄类的时候会漏掉。
而且我只需要修改一下ShowMyself里面的ShowHero()方法就完事儿。甚至都不需要修改Main方法!