java非侵入式接口实现_No-intrusive, 非侵入式接口设计
Go语言的Interface很大不同于C#,Java这种OOP语言的,其强大之处之一在于非侵入式设计。
基础复杂性是守恒的,需要解决的基本问题始终是需要解决的;最终的复杂性,却取决于基础复杂性彼此间的依赖,如果互相依赖,最终将得到指数级的复杂性,而 如果彼此独立,最终只是若干基础复杂性简单的累加,因此,程序需要更好的的Design和Organize,主要任务就是“降低模块间的依赖至最小”,而 对开发效率有重大影响的,主要是编译期依赖,为此,人们发明了若干技术来降低编译期依赖。
......
2,非侵入性
编译时对“引用”的类和接口定义的依赖,我们称之为“侵入性”的;任何显式的“接口”、“基类”都是侵入性的,不可避免的带来编译期依赖;即使这些依赖很小,但依然有办法而且应该尽可能消除
Java的法宝是反射,但效率低,并不具有类型安全性,因此,除非独立性和灵活性需求大于效率和类型安全需求的场合,一般不要使用反射;
而 在非侵入性问题上,C++有强大的语言机制--模板:类型安全并且效率无损;它不需要你做任何继承操作,只需要满足模板参数的概念约束,提供“语法兼容” 的调用即可;注意是“语法兼容”即可,这意味着你的函数可以是“static”的,也可以是“virtual”的,也可以什么都不是,只要签名一致就可 以; 比如在扩充STL时,你不需要include任何STL头文件
当然模块系统和非侵入性在解决依赖问题上是正交的;作为降低编译期依赖的有效机制,以模板参数的概念约束形成的模块接口,应得到更多应用
非侵入式设计是一个更广的概念,不同于IoC, DI, AOP等。
对于框架来讲:
一个客户端的代码可能包含框架功能和客户端自己的功能。
侵入式设计,就是设计者将框架功能“推”给客户端,而非侵入式设计,则是设计者将客户端的功能“拿”到框架中用。
侵入式设计有时候表现为客户端需要继承框架中的类,而非侵入式设计则表现为客户端实现框架提供的接口。
侵入式设计带来的最大缺陷是,当你决定重构你的代码时,发现之前写过的代码只能扔掉。而非侵入式设计则不然,之前写过的代码仍有价值。
Go语言的接口设计就是一种非侵入性的设计,作为服务提供者不用预先知道所需要实现的接口,也不用为了实现某一个接口而import一个专门的包。而接口可以被定义在客户端,按需求定义,同时接口与接口之间也可以相互赋值,这样就不用过多忧心接口的粒度,给接口设计带来了很大的灵活性。
这种非侵入性设计更符合自然模型,其依赖是单向的。作为服务的提供者,客观来讲很难预料到今后所需要的所有接口,同时也不应该被浸入客户端的逻辑,即不应该被植入许多客户端被定义的接口,甚至于客户端还未成型。同理,对客户端也是如此。
我们可以看到,Go的非侵入式接口这方面是解耦合的,完全可以按需求定义接口,使用时再注入实现。同时接口的实现方是完全独立的,这可以更简单的进行单元测试和复用。
java非侵入式接口实现_No-intrusive, 非侵入式接口设计相关推荐
- java多线程中 锁 的概念的理解,java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)...
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...
- java 泛型示例_Java泛型示例教程–泛型方法,类,接口
java 泛型示例 Java Genrics is one of the most important features introduced in Java 5. Java Genrics是Java ...
- java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)
java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一) 目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronize ...
- 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞与 I/O 多路复用、Java NIO 之间的联系
同步阻塞.同步非阻塞.异步阻塞.异步非阻塞与 I/O 多路复用.Java NIO 之间的联系 先验知识 此处的异步指的是什么 同步.异步.阻塞.非阻塞 同步阻塞.同步非阻塞.异步阻塞.异步非阻塞 一个 ...
- java 接口的静态方法_Java8新特性:接口的默认方法与接口的静态方法
默认方法允许接口方法定义默认实现,子类方法不必须实现此方法而就可以拥有该方法及实现.如下: public interface DefaultFuncInter { int getInt(); defa ...
- java自学 part2 数组 类和对象 包 继承 多态 抽象类 接口
数组:arr 获取数组的长度:arr.length 数组转字符串: Arrays.toString(arr) 数组的拷贝: Arrays.copyOf(arr,arr.length) 数组的排序:Ar ...
- java 微信报关_微信开放平台,_请求微信报关接口返回的数据,微信开放平台 - phpStudy...
请求微信报关接口返回的数据 请求微信报关 接口错误 552E051CB6F4DBC6029B8218DBD5A52A gh_4dbf09a0a18e 1342661701 20160825113538 ...
- JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...
抽象类和接口 1.抽象类 抽象方法是只有方法签名,没有方法实现的方法.有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法.抽象方法和抽象类必须使用abstract修饰符来定义. 抽象类不能被实例 ...
- java中抽象类和接口的相同点和不同点_Java中接口和抽象类的区别与相同之处
1. 抽象类: (1).概念:抽象类是对一种事物的抽象,即对类抽..抽象类是对整个类整体进行抽象,包括属性.行为.Java抽象类和Java接口一样,都用来声明一个新的类型.并且作为一个类型的等级结构的 ...
最新文章
- C++调用web服务(java事例供参考)
- 14.索引数组初始化
- Day 3: Flask —— 使用Python和OpenShift进行即时Web开发
- Android JNI原理分析
- lua 字符串分割_Lua 分隔字符串,可以设置指定分隔符
- 使用Java查询DynamoDB项
- 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积
- linux如查看是否安装了mysql_linux中如何查看mysql是否安装
- docker安装和启动zookeeper,数据导入及导出
- Spring Boot 整合定时任务,可以动态编辑的定时任务
- 【一句日历】2019年8月
- TDA4VM VTM模块使用笔记
- 云服务器怎么多人进去编辑文档,有道云协作怎么实现多人协同编辑 多人同时处理文档方法...
- MATLAB-mesh/ezmesh函数三维图形绘制
- c盘java文件误删_电脑清理C盘时误删重要文件如何恢复
- vue内使用 cytoscape(数据可视化)
- nao机器人开发资料
- 如何用SpreadJS添加背景图片和水印?
- spring boot 虚拟路径url中文无法访问
- Cisco Firepower 9300 Series FTD Software 7.1.0 ASA Software 9.17.1 下载
热门文章
- 最新酷狗音乐反爬来袭,Python掌握酷狗排行榜加密规则
- jwt身份令牌数据处理 前后端分离式开发
- 大数据的完整解决方案和体系化
- 《交通警察》分集剧情介绍
- 可持续能源技术:改变世界的新方案
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(四)(Python语言基础(2))
- mysqldump导出时: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1':
- 关于新版NZT7/8的安装方法和更新说明
- Android Studio汉化包
- SD-WAN是面向分支机构的新兴、不断发展的解决方案