引言:
"面相接口编程" 是OO 编程人员经常会碰到的名词, 初学者可能在刚开始的时候,对这些名词不是很理解,过于这个概念的资料,网上一搜也是一大片.不过相比于其他文章较为抽象的解释,本文想通过一个比较接地气的例子来阐述下 " 面相接口编程" (面相抽象编程)的某些个方面的特点, 不敢保证让你完全掌握"面相接口编程"的概念,但我想如果你仔细阅读如下文字的话,最起码再下次遇到这个名词的时候,会稍微有点感受.
一个例子:
好了,官方的定义我就不摆了,直接说例子. 以java为例哈. 比如说现在有一个集合 这个集合里面呢放男人(Man类),这个 Man类呢有两个属性,(height,wearShirt),分别对应身高,和"是否穿了衬衫" 这两个属性. 以上这些是初始条件, 好了,接下来博主就要发问了: 写一个工具类,请找出集合中帅的人? 那每个人对于帅的定义不同, 可能有些女孩子认为180cm以上的就挺帅的(肤浅..),又有可能有些人认为穿白衬衫的男孩子就挺帅的. 那这句话怎么说才正确呢? , 我说,满足帅的条件的男人是帅的. 这句话准没错吧? 这里的"帅的条件" 就是一个抽象的概念, 抽象一般来说都是较为稳定的,就像上面我说的"满足帅的条件的人都是帅的" 这句话在任何情况下都是准确的,所以面相抽象(接口)的代码也是稳定的.(就比如如下代码中ListUtils工具类的 filter方法,无论帅的标准怎么变,这段代码的逻辑都是正确的)., 以下是完整的代码.
public interface Rule<T> { //帅的标准 boolean meetCondition(T t); //是否满足帅的条件 } // 工具类 class final ListUtils{ public static <T> List<T> filter(List<T> list, Rule<T> rule) { List<T> result = new ArrayList<T>(); for (T t : list) { if (rule.meetCondition(t)) result.add(t); } return result; } } //客户端代码 public static void main(String[] args) { //找出集合中帅的人 listUtils.filter( manList, new Rule<Man>(){ public boolean meetCondition(Man man){ return man.getHeight>180; } }
总结: 所以说,面相接口编程就是将问题中稳定的部分抽象出来,并建立模型, 具体的实现由客户端来决定. 一个很经典的范例就是jdbc, jdbc 只是制定了 访问数据库的规范(即把访问数据库的步骤给抽象出来),针对于不同的数据库,对应不同的驱动(即实现). 可能大家已经发现了,上面举得例子其实就是对应对java中闭包的应用. 关于闭包,在很多面相对象的语言中也是一个重要的概念. 特别是js中,闭包是很大的一块内容. 从上面的例子不难发现,闭包其中的一个优点就是有效的消除了模版化的代码, 想象一下,如果不把过滤过程给抽象出来,是不是当过滤的规则变动的时候,每次写过滤函数的时候都得写一遍for() 循环, 其实写这种过滤函数,我们主要在乎的是什么样的内容应该留下,什么样的内容应该剔除,这个剔除的逻辑其实才是我们所关心的. 这个例子其实就是对应js中的filter 函数 , 象js中类似的还有 every(), each(), any(), 这些函数. 其实原理都一样,都是面相接口(抽象)编程思想的一种应用而已. 当然上述所述的只是面向接口编程中的其中一点,但也是最重要的一点. 最后,由于本人水平有限,可能对于文中所提到的一些概念不是很准确,有疏漏的地方,还望大家多多指教. ^_^
相关推荐
大学JAVA课程的教学PPT,从很基础的面相对象编程开始讲解,很适合JAVA初学者。
《Java面向对象编程》 练习题一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是( JAVA SE )、( JAVA EE )、( JAVA ME )。 2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置Path为(D:...
Java是一种面相对象的编程语言。计算机语言分成两种,第一种是面向机器结构的语言,构建数据模型是基于机器的结构。第二种是面向待解决问题结构的语言,构建数据模型是基于问题的结构。Java提供了更丰富的工具来描述...
JAVA面向对象编程(孙卫琴)(带完整书签版,课后答案,源代码) 最好的JAVA入门书籍 讲解全面,透彻 需要单独下载课后答案和源代码的在本人资源中可以找到,欢迎下载 本压缩包共分为6个部分,这里为第二部分。
java核心技术:面向对象编程电子版第四卷
本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...
1、Java语言是一种完全的_面相对象___程序设计语言。 2、布尔型常量有两个值,它们分别是_true__、_false___。 3、在定义一个方法时,一般都要指明该方法的返回值类型,如果它不返回任何值,则必须将其声明成 ...
Java 面相对象 考试复习资料 试卷附答案 习题 相应常用小程序 简答 概念 Java 面相对象 考试复习资料 试卷附答案 习题 相应常用小程序 简答 概念
第1章_Java入门,第2章_基本数据类型,第3章_运算符、表达式和语句第4章_类与对象第5章_继承与接口第6章_内部类与异常类
从手相和面相看一个人的生活习惯和个人性格
百鸡百钱问题。公鸡每只3元,母鸡每只5元,小鸡3只1元,用100元钱买100只鸡,公鸡、母鸡、小鸡应各买多少?
使用Java实现面相对象开发,里面有详细讲解,清晰文档版。
可以快速学习到Java语言的精髓,和面向对象程序设计的原则和思想
在下载和比较了大量同类书籍后不得不承认孙卫琴老师的这本书循序渐进由浅入深是最好的Java入门教程,同时它的...本资源包含《Java面向对象编程》的电子书,实例源代码,课后题答案等可以说是当前该书最全的资源了。。。
java面相对象的资料,适合需要总结自己面相对象学习情况的人员,内容还是很不错的
java面相对象的思维导图,自己看着还行。就分享一下,目前是大二,自己也不算很厉害,如有不喜欢勿喷。
易语言面相对象编程仿java集合 list, 以及map工具类 模块ec源码
java之面向对象 附源代码java之面向对象 附源代码java之面向对象 附源代码java之面向对象 附源代码 whsvc
各种小程序包括person类,百钱买百鸡等