教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 学前教育 >

面向接口编程详解 - 图文(3)

来源:网络收集 时间:2026-08-20
导读: 我们先来评价这种方案:首先它解决了代码冗余的问题,因为可以动态替换移动设备,并且都实现了共同的接口,所以不管有多少种移动设备,只要一个Read方法和一个Write方法,多态性就帮我们解决问题了。而对第一个问题

我们先来评价这种方案:首先它解决了代码冗余的问题,因为可以动态替换移动设备,并且都实现了共同的接口,所以不管有多少种移动设备,只要一个Read方法和一个Write方法,多态性就帮我们解决问题了。而对第一个问题,由于可以运行时动态替换,而不必将移动存储类硬编码在Computer中,所以有了新的第三方设备,完全可以替换进去运行。这就是所谓的“依赖接口,而不是依赖与具体类”,不信你看看,Computer类只有一个MobileStorage类型或IMobileStorage类型的成员变量,至于这个变量具体是什么类型,它并不知道,这取决于我们在运行时给这个变量的赋值。如此一来,Computer和移动存储器类的耦合度大大下降。

那么这里该选抽象类还是接口呢?还记得第一篇文章我对抽象类和接口选择的建议吗?看动机。这里,我们的动机显然是实现多态性而不是为了代码复用,所以当然要用接口。

最后我们再来看一看方案四,它和方案三很类似,只是将“可读”和“可写”两个规则分别抽象成了接口,然后让IMobileStorage再继承它们。这样做,显然进一步提高了灵活性,但是,这有没有设计过度的嫌疑呢?我的观点是:这要看具体情况。如果我们的应用中可能会出现一些类,这些类只实现读方法或只实现写方法,如只读光盘,那么这样做也是可以的。如果我们知道以后出现的东西都是能读又能写的,那这两个接口就没有必要了。其实如果将只读设备的Write方法留空或抛出异常,也可以不要这两个接口。总之一句话:理论是死的,人是活的,一切从现实需要来,防止设计不足,也要防止设计过度。 在这里,我们姑且认为以后的移动存储都是能读又能写的,所以我们选方案三。

实现

下面,我们要将解决方案加以实现。我选择的语言是C#,但是在代码中不会用到C#特有的性质,所以使用其他语言的朋友一样可以参考。

首先编写IMobileStorage接口: 1namespace InterfaceExample 2

{

3 public interface IMobileStorage 4

{

5 void Read();//从自身读数据 6 void Write();//将数据写入自身 7 } 8}

比较简单,只有两个方法,没什么好说的,接下来是三个移动存储设备的具体实现代码: U盘

1namespace InterfaceExample 2

{

3 public class FlashDisk : IMobileStorage 4

{

5 public void Read() 6

{

7 Console.WriteLine(\FlashDisk??\); 8 Console.WriteLine(\); 9 } 10

11 public void Write() 12

{

13 Console.WriteLine(\FlashDisk??\); 14 Console.WriteLine(\); 15 } 16 } 17} MP3

1namespace InterfaceExample 2

{

3 public class MP3Player : IMobileStorage 4

{

5 public void Read() 6

{

7 Console.WriteLine(\MP3Player??\); 8 Console.WriteLine(\); 9 } 10

11 public void Write() 12

{

13 Console.WriteLine(\MP3Player??\); 14 Console.WriteLine(\); 15 } 16

17 public void PlayMusic() 18

{

19 Console.WriteLine(\playing??\);

20 } 21 } 22}

移动硬盘

1namespace InterfaceExample 2

{

3 public class MobileHardDisk : IMobileStorage 4

{

5 public void Read() 6

{

7 Console.WriteLine(\MobileHardDisk??\); 8 Console.WriteLine(\); 9 } 10

11 public void Write() 12

{

13 Console.WriteLine(\MobileHardDisk??\); 14 Console.WriteLine(\); 15 } 16 } 17}

可以看到,它们都实现了IMobileStorage接口,并重写了各自不同的Read和Write方法。下面,我们来写Computer: 1namespace InterfaceExample 2

{

3 public class Computer

…… 此处隐藏:158字,全部文档内容请下载后查看。喜欢就下载吧 ……
面向接口编程详解 - 图文(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/595443.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)