当前位置: 首页 > news >正文

一个实例来简单的说明接口

很多时候在考虑设计而不是考虑编码的时候,接口才真正清晰,明朗的把它的原理展现给你。举个简单的例子,计算机的主板和显卡,他们之间有统一的约定,只要符合PCI扩展的标准,那么你的显卡肯定能插上主板,并能访问主板来的信息。这个约定就是接口。很多时候,在软件开发领域,接口设计应该是系统分析者的事情,也就是Team Leader的是事情了。Team Leader根据需求设计出Schelable的接口和Architecture,程序员根据他的Architecture去编码,最后开发,测试等等。其实,很多时候,你不用接口也能实现相同甚至更完备的功能。但是,有了接口,会使整个设计变得清晰,明朗。如果从软件的扩展性和重用性上看,接口的设计更显的举足轻重。所以说,理解和认识接口应该从设计的角度看,而不是编码的角度。

附:A   Sample   
需求:在一个表格(已有的Table类)里面我要显示这样一些数据:  
1   文本信息:   显示文本  
2   图片信息:显示图片   
3   视频信息:播放视频   
   
设计如下:  
None.gif interface  IDisplayable
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {   
InBlock.gif  
void Display(Table table);   
ExpandedBlockEnd.gif}
   
None.gif    
None.gif
public   class  Text:IDisplayable   
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {   
InBlock.gif  
public void Display(Table table)   
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{   
InBlock.gif   
//implements the text display method   
ExpandedSubBlockEnd.gif
  }
   
ExpandedBlockEnd.gif}
   
None.gif    
None.gif
public   class  Picture:IDisplayable   
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {   
InBlock.gif  
public void Disply(Table table)   
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{   
InBlock.gif   
//implements picture display here   
ExpandedSubBlockEnd.gif
  }
   
ExpandedBlockEnd.gif}
   
None.gif    
None.gif
public   class  Vedio:IDisplayable   
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {   
InBlock.gif  
public void Disply(Table table)   
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{   
InBlock.gif    
//implements vedio play         
ExpandedSubBlockEnd.gif
  }
   
ExpandedBlockEnd.gif}
   
None.gif    
None.gif
public   class  Test   
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {   
InBlock.gif   Text t 
= new Text("Hello");   
InBlock.gif   Picture p 
= new Picture("1.jpg");   
InBlock.gif   Vedio v 
= new Vedio("sample.avi");   
InBlock.gif   Table table 
= new Table();   
InBlock.gif   Table.Add(t);   
InBlock.gif   Table.Add(p);   
InBlock.gif   Table.Add(v);   
InBlock.gif   Table.Show();   
InBlock.gif    
InBlock.gif   
foreach(IDisplayable disp in Table.Items)   
ExpandedSubBlockStart.gifContractedSubBlock.gif   
dot.gif{   
InBlock.gif       disp.Display(
this.table);   
ExpandedSubBlockEnd.gif   }
   
InBlock.gif          
ExpandedBlockEnd.gif}

相关文章:

  • ASP.NET 2.0 Web Part编程之定制Web Part
  • .NET 指南:抽象化实现的基类
  • 浮动静态路由
  • 范伟导老师Sniffer课程资料
  • 春节期间新闻回顾:思科微软多事 熊猫烧香完事
  • Windows Mobile 6 SDK 正式发布!
  • 怎样用javascript操作ftb编辑区内容
  • 局域网防雷电***实用解决方案
  • 系统不显示桌面的原因和解决方法
  • 让Windows下的驱动乖乖在Linux中安家!
  • Linux下文件和目录的颜色代表的含义
  • 哈哈,毒霸可以直接关闭自动播放功能,真是太棒了
  • cpu
  • TCP/IP协议
  • 报道!证明还活着。。。
  • @angular/forms 源码解析之双向绑定
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《剑指offer》分解让复杂问题更简单
  • 【Linux系统编程】快速查找errno错误码信息
  • 78. Subsets
  • Hexo+码云+git快速搭建免费的静态Blog
  • input的行数自动增减
  • JSONP原理
  • Lucene解析 - 基本概念
  • php中curl和soap方式请求服务超时问题
  • Python进阶细节
  • Python学习之路13-记分
  • springMvc学习笔记(2)
  • Vue 2.3、2.4 知识点小结
  • vue 配置sass、scss全局变量
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 服务器从安装到部署全过程(二)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 正则与JS中的正则
  • - 转 Ext2.0 form使用实例
  • zabbix3.2监控linux磁盘IO
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​虚拟化系列介绍(十)
  • #100天计划# 2013年9月29日
  • #pragma multi_compile #pragma shader_feature
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (12)Hive调优——count distinct去重优化
  • (8)STL算法之替换
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (独孤九剑)--文件系统
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (剑指Offer)面试题34:丑数
  • (蓝桥杯每日一题)love