用了N年的接口,你知道接口是什么吗?——一个简单实例说明接口的伟大意义...
ASP.NET基础知识:简单的实例理解接口的伟大意义
WestGarden 2012-5-26
http://www.cnblogs.com/WestGarden/
源代码:13033480群共享
首先,我们必须明确,接口是一个类。
“接口是一个特殊的类,又是一个特别有意义的类,不是因为它的特殊,而是因为它的意义,叫它接口更合适,但不能忘了,它仍是类。”
“接口是一个只有声明,没有实现的类。”
很多人纠结于接口只是一个标准,是一个契约,而忘记了它的意义。
下面我们来看这样一个问题:
话说有家影视公司选拔偶像派男主角,导演说了,男演员,身高是王道。于是有下面代码:
public class Actor
{private string name;private int height;public Actor(string name, int height){this.name = name;this.height = height;}public string Name{get { return this.name; }}public int Height{get { return this.height; }}public int CompareTo(object obj){return this.height - ((Actor)obj).height;}public string GetName(){return this.name;}
}
这个类,除了可以存放男演员的基本信息,还定义了一个函数publicint CompareTo(object obj),因为,我们要比较男演员的身高,用身高判断哪个演员更好。
有了这个类,后面,你可以比较轻松地编写代码,判断是刘德华更优秀,还是潘长江更优秀了,这个代码,我这里就略过去了….
(儿童不宜,此处省略1000行)……………….
现在的问题是,明天又要选拨女演员了,导演说了,女演员,苗条是王道。女演员的这个类,你肯定是要做的,只是….
只是,我刚才略过去的,让你编写的代码,你是不是还要再重新编写呢????
这等于又重新编写了一个程序。
这时,我们就想到了接口,我们来接着看代码吧:
我先做一个接口:
using System;namespace WestGarden.IDAL
{public interface ISelectPlayer{string GetName();int CompareTo(object obj);}
}
这个接口,定义了两个函数,一个,当然是要进行比较,标准由你定,你说是导演定的,那更好,不用你费脑子了。
我们把刚才做的男演员的类,按照这个接口的标准来实现,也就是继承这个接口:
using System;using WestGarden.IDAL;namespace WestGarden.DAL
{public class Actor:ISelectPlayer{private string name;private int height;public Actor(string name, int height){this.name = name;this.height = height;}public string Name{get { return this.name; }}public int Height{get { return this.height; }}public int CompareTo(object obj){return this.height - ((Actor)obj).height;}public string GetName(){return this.name;}}
}
顺手,把女演员的类也做了吧:
using System;using WestGarden.IDAL;namespace WestGarden.DAL
{public class Actress:ISelectPlayer{private string name;private int weight;public Actress(string name, int weight){this.name = name;this.weight = weight;}public string Name{get { return this.name; }}public int Weight{get { return this.weight; }}public int CompareTo(object obj){return ((Actress)obj).weight - this.weight;}public string GetName(){return this.name;}}
}
这时,我们在应用层这样编写代码:
using System;using WestGarden.IDAL;
using WestGarden.DAL;namespace WestGarden.Web
{public partial class Select : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Actor actor1 = new Actor("潘长江", 150);Actor actor2 = new Actor("刘德华", 180);Actress actress1 = new Actress("巩俐", 120);Actress actress2 = new Actress("周迅", 80);Response.Write("最佳男演员是:"+WhoIsBetter(actor1, actor2)+"</br>");Response.Write("最佳女演员是:"+WhoIsBetter(actress1, actress2)+"</br>");}//这里就象一个USB口一样工作着,无论你插上的是男演员、女演员...,只要它继承的是ISelectPlayer接口。public string WhoIsBetter(ISelectPlayer a, ISelectPlayer b){if (a.CompareTo(b) > 0)return a.GetName();elsereturn b.GetName();}}
}
注意:
我们做的这个函数,publicvoid WhoIsBetter(ISelectPlayer a,ISelectPlayer b)
这个函数,形参是ISelectPlayer,是接口,我认为,接口的意义,就在这里。
你实现接口的类是男演员也好,女演员也好,男主角也好、女主角也好、男配角也好、女配角也好、男群众演员也好、女群众演员也好,只要你继承的是我这个ISelectPlayer,或者,你习惯于说,遵守了我这个接口的标准、或者契约,我这段代码,都不需要改变!!
这和那个比方是一样的,不管你插在USB接口的是U盘,还是移动硬盘,还是什么mp3,还是mp4,还是你新发明的什么东西,只要你能插在我的USB口上,我主机都不需要做任何改变,直接在上面读取或者写入数据。
这个,是硬件接口的意义所在,也是我们这个ISelectPlayer类的意义所在,因为它有了这个伟大的意义,才把它改叫为接口的,因为,它象USB接口一样工作着……
文中观点思想来源于博客:
http://www.cnblogs.com/WestGarden/
文中实例创意来源于:
http://www.cnblogs.com/wu-jian/archive/2012/05/24/2516284.html
在此一并表示感谢!
版权所有©2012,西园电脑工作室.欢迎转载,转载请注明出处.更多文章请参阅博客http://www.cnblogs.com/WestGarden/
转载于:https://www.cnblogs.com/WestGarden/archive/2012/05/26/2519203.html
用了N年的接口,你知道接口是什么吗?——一个简单实例说明接口的伟大意义...相关推荐
- SmartSql使用教程(1)——初探,建立一个简单的CURD接口服务
一.引言 最近SmartSql被正式引入到了NCC,借着这个契机写一个使用教程系列 二.SmartSql简介[摘自官方文档] 1. SmartSql是什么? SmartSql = MyBatis + ...
- python写rest服务_Python 如何创建一个简单的REST接口
问题 你想使用一个简单的REST接口通过网络远程控制或访问你的应用程序,但是你又不想自己去安装一个完整的web框架. 解决方案 构建一个REST风格的接口最简单的方法是创建一个基于WSGI标准(PEP ...
- 使用Node.js写一个简单的api接口
引入Http模块 默认你已经安装了Node.js Node当中内置了Http模块: 可以使用 var http= require("http"); 复制代码 引入http模块: H ...
- python+flask编写一个简单的登录接口例子
在学习接口测试的时候往往会因为没有实际操作的接口进行测试而烦恼,这里教大家自己编写两个接口用于学习接口测试 1.编写一个登录的接口 2.在pycharm运行 3.使用apipost进行登录接口测试 输 ...
- 用Python写一个简单的api接口
python框架有很多,例如:Flask,Django,FastAPI 等.本文将使用 Flask 来编写 API 接口. 安装Flask 首先,您需要安装 Flask: pip install fl ...
- Python实现一个简单数据库查询接口编写
Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架. Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展 ...
- 如何做一个简单的开放接口(1)-功能设计
1.缘起 最初,系统系统间都是孤立的.业务是贯穿的,系统间也必然需要交互数据. 实现数据交互的方式有好多种,可以通过ftp交互Excel文件,可以通过互相读写的中间库,可以通过Web Services ...
- 接口中定义的成员变量是( )。_抽象与接口
原文链接:抽象与接口 抽象类 抽象类的定义 Java可以创建一种类专门用来当作父类,这种类称为"抽象类".抽象类的作用有点类似"模板",其目的是要设计者依据它的 ...
- 计算机视频DVI接口,HDMI、DVI 电脑为什么会有这么多种视频接口?
视频接口多样性 在我们的电脑出现的历史中,有很多接口出现了,仅视频接口我们目前能常接触到的就有VGA.DVI.HDMI和DP接口,而且到目前为止,还是有很多显卡还在支持老式的VGA.DVI接口. DV ...
最新文章
- Linux那些事儿 之 戏说USB(2)漫漫辛酸路
- Android 开源框架Universal-Image-Loader全然解析(一)--- 基本介绍及使用
- urlScan 配置阻止sql注入
- 光栅衍射主极大个数_光栅的分类及常规指标介绍
- java自动gc_具有Java 7中自动资源管理功能的GC
- 2 年增长 1 万亿!继苹果之后,微软市值也突破 2 万亿美元
- 这次国足想不出线都难
- linux 基础笔记
- asp文件上传原理及分析
- alisql mysql_alisql|alisql数据库下载 v5.6 官方版_小皮网
- cmd命令查看服务器硬盘序列号,硬盘序列号查询命令_Win7系统中怎么通过CMD查看硬盘序列号...
- 广州市黄埔区水利工程管理划定带动水利人才上升
- Omapl138 AT070TN83 lcd驱动移植
- 如何快速去除图片上的水印
- CVPR 2021 Oral | Transformer再发力!华南理工和微信提出UP-DETR:无监督预训练检测器...
- vue PC端项目打包成windows桌面程序
- vue 跳转新窗口传递参数并改变窗口名称
- 使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果
- html手机自动放大,解决HTML5手机端页面缩放的问题
- IG NZT 安装使用过程中可能遇到的问题解决办法