看了这里的一些帖子和很多地方的帖子,很多人都在问为什么非要interface或者abstract class,然后还要在写一个实现类,而其实,我就市要做一个很简单的功能!?
对,如果你制作一个简单的功能,我同意你可以直接使用spring hibernate等框架来写,他们本身的好处也是干这个的。
但是,中国人有句老话,叫做杞人忧天,很多的时候,你有没有内心问自己,这个系统,我设计的,如果老板要改动,我可以在很短的时间内做到改变么?
当你问自己这个问题的时候,你就已经把直接写实现类的做法怀疑了。
面向接口的原则,不是只出现在程序员或者说IT界,接口设计是人类对一个问题或者一个物体的概括理解能力的表现。我们日常生活中处处有接口。
在我作一个简单的说明之前,我要补充以下,系统框架中,除了层的概念,还有一个叫做boundary,每一个layer(层)是由不同的boundary(box)组成。
举例一二三,比如,简单的说,发电厂就是实现类(implementation class),每个发电厂都是独立的boundary,而发电厂就是统称为一个layer,也许还不明白,比如,我们平时说,发电厂,没人关心你家的电来自于那个发电厂,而关心的是你家的插座有没有电,所以三项插座,二项插座至十发电厂给用户的最终接口。发电厂之间也是通过一个特殊的工业接口来互相访问,所以,这也是为什么说,有时候有的发电厂在夏天负担过重,就可以把负担分给其他的电场供应。反过来,如果让老百姓天天关心的是发电厂,而不是插座,那你觉得这样的城市电力设计是不是很糟糕呢?
在举个例子,比如果.....,嗯,好,就说汽车,汽车都见过吧,四个轮子,一个方向盘,但是,你们有没有发现,有时候你们的汽车上面的音响系统坏掉或者要升级的时候,只需要取下中间面板上面的那个独立的音响播放器,然后买一个新的,由汽车维修给你们撞上就可以了,不管是飞利浦,boss还是简单的radio的和卡带的,你们从来不会在买一个汽车音响的时候关心他能不能安在汽车上,而是可以完全关心颜色,款式,品牌这些问题上,如果,反过来设计,每一个汽车品牌都直接实现自己的独立设计,不遵循工业接口,那你觉得这样的汽车音响会有很多选择么?
最后在举一个我们每天息息相关的例子,门,每天人们通过不同的门,进入或者走出不同的地方,而门就是那个地方或者建筑物的接口,如果说,我们反过来,每个大厦或者建筑物都直接应用自己喜欢的实现进出的方式,那你们觉得每天的生活会不会有点太麻烦?
我举例子只是来简单的解释一下,接口不是一个繁琐的过程,而是每个工业,甚至是每天生活中,我们必须应用到的东西,所以,如果看待现在的文明社会用程序员的方式的话,那么就是一种接口世界,现实生活中很多人叫做标准或者协议,由看得见摸得找的,也有看不见摸不着的接口。
很多人可能想对我举的例子进行进一步的反驳,其实没有必要,如果你要跟我探讨每一个例子来映射程序中的接口问题,那就是在抬杠,抬杠很浪费时间,所以,我不会跟你探讨例子的问题,那就是个例子,而这个例子是每天确实发生的,使用的。
希望能解释明白一点在程序设计中接口编程的优势所在。
分享到:
相关推荐
调用接口怎么知道使用的是哪个实现类 Java通过接口调用方法的时候,怎么知道调用的是哪个实现类 当调用接口中的方法时,如何判定用的是哪个实现类 一个接口有多个实现类,怎么知道调用了哪个实现类
一个实现类一般实现了相当多的接口,为了避免所实现的接口出现方法重名,另外对这些方法有好的分类,故把实现类对象赋值给接口类型的对象,而不是直接用类来创建对象。由于创建的对象是某个接口类型的,则这个对象就...
通过控制反转实现module间服务提供、Activity跳转,Activity支持参数自动处理传递的参数,不需要繁琐的注解标注 多接口支持。优点在于不必要暴露所有接口,只需将需要的接口暴露,比如一个服务可能支持多个功能,但是...
需求说明 (1)定义接口:UserDao、TopicDao (2)声明接口的方法 ...(2)常量可以使用接口名直接调用:接口名.常量名 (3)char sex=gender==1?’女’:’男’;//条件运算符,作用等用如下条件语句:
接口中我使用了缓存,以及在返回数据时候用了响应实体包装了, 没有直接返回数据库映射实体类。 怀疑问题点: 响应实体包装实体类中的字段有误,全部写成了小写字母? 缓存在出入库的时候会自动转化大小写。 问题...
前端直接调用图床API接口报错,利用后端接口进行文件转发实现接口反向代理 使用Spring Boot内置的`RestTemplate`来实现。以下是一个基于`RestTemplate`转发文件上传请求到目标服务的示例 主要运用了以下技术: 1. ...
很多初学者对C#接口的作用不了解,于是我写了“基于接口实现的信号滤波器示例”源码,供大家参考理解注意事项:开发环境为Visual Studio 2010,使用.net 3.5开发更新内容: 1、采用2种方式生成接口:一是新建实现...
接口与抽象类的区别 抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。 动物类要有呼吸方法。...总之,在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。
对于接口,他需要实现类实现所有方法,所以必须在接口和实现类中都添加标签。其次,在实现类中,必须指定Deep属性标签,用于深度搜索接口。该值是int类型,表示深度层次。然后他会自动补充异步方法。 3.3 扩展实例...
封装了一个kuaid100的代码,...KuaidiReader:为信息格式化处理类,为满足深层次需求,将免费版返回的html格式内容直接格式化去除对应自己需要的数据,可以直接后台完成后,传参到前台排版成自己网站前台想要的格式。
详细介绍了dot Net中抽象类与接口的区别 3.1 相同点 • 都不能被直接实例化,都可以通过继承实现其抽象方法。 • 都是面向抽象编程的技术基础,实现了诸多的设计模式。 3.2 不同点 • 接口支持多...
包与接口实验报告 实验 包与接口 【实验目的】 1. 了解Java 中包(package)、接口(interface)的作用。...接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。
实现接口的任何类或结构都必须实现其所有成员。 接口可以选择性地定义其部分或全部成员的默认实现。 接口无法直接进行实例化。 其成员由实现接口的任何类或结构来实现。 一个类或结构可以实现多个接口。 一个类可以...
abstract class,只可以包含抽象方法,也包括一些常量的定义,丝毫不带半点实现细节,它只提供接口,可以有数据成员,默认是、同时也必须是static & final型,可以通过Interface name直接访问。Interface可以实现...
很好的 动态实现接口 ,自定义类加载器,动态编译,是接口能直接运行
1、高通滤波器(类SignalFilterPassHigh,实现了接口ISignalFilter的所有方法)和低通滤波器(类SignalFilterPassLow,实现了接口ISignalFilter的所有方法)都有滤波功能(接口ISignalFilter定义了滤波器的功能:...
分享个ThinkPHP 3.2.3最新版本整理支付宝类,支付宝接口相信很多人都开发过,但要在框架中自己去整合还是需要时间的,为了减少大家的时间,我把个整合好的支付宝类分享给大家。 注:ThinkPHP使用最新版本才能使用哈...
微信公众号支付是基于微信公众号而开发的支付接口,在已有的公众号里可以添加ASP的公众号支付,微信中生成订单后,可以直接调出微信钱包直接支付,非常方便,同样支持自动更新订单状态,刷卡支付则适用于商场类的...
NetBeans中实现java的一个接口,主要写一个接口使得任何类都可以直接操作界面上的控件!
有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候。 简单来说,可以使用Type.IsAssignableFrom方法: typeof(IFoo).IsAssignableFrom(bar.GetType()...