`
liuwaner118
  • 浏览: 2998 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java_面相接口(抽象)编程

阅读更多

引言:    

    "面相接口编程" 是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(), 这些函数.  其实原理都一样,都是面相接口(抽象)编程思想的一种应用而已.  当然上述所述的只是面向接口编程中的其中一点,但也是最重要的一点. 最后,由于本人水平有限,可能对于文中所提到的一些概念不是很准确,有疏漏的地方,还望大家多多指教. ^_^ 
1
0
分享到:
评论

相关推荐

    我的Java面相对象考试复习资料

    Java面向对象编程是Java语言的核心特性,它使得代码更加结构化、可维护,并且易于复用。在Java中,一切皆为对象,这是面向对象编程的基础理念。本复习资料主要涵盖了以下几个关键知识点: 1. **类与对象**:类是...

    java之面向对象 附源代码

    此外,Java提供了抽象类(abstract class)和接口,抽象类可以包含抽象方法(没有实现的方法),而接口则完全由抽象方法组成,是实现多继承的一种方式。 5. 接口与实现: 接口在Java中扮演着规范和契约的角色,定义...

    面向对象程序设计Java.ppt

    面向对象程序设计(Object-Oriented Programming,OOP)是现代软件开发中广泛采用的一种编程范式,尤其在Java语言中得到了深入的应用。本资源"面向对象程序设计Java.ppt"是一个基础讲解材料,旨在帮助初学者理解并...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    面相对象技术作品基于java 控制台 商品库存管理系统

    在Java中,面向对象编程(OOP)主要涉及四个基本概念:封装、继承、多态和抽象。在这个商品库存管理系统中,我们可以看到这些概念的实际应用。 1. 封装:这是将数据和操作这些数据的方法绑定在一起的过程。例如,...

    山东大学面对对象纸牌实验

    【标题】:“山东大学面对对象纸牌实验”是面向计算机科学与技术专业学生的一个实践项目...通过这个实验,学生不仅可以提升Java编程技能,还能深入理解和应用面向对象编程的核心概念,增强问题解决和软件工程实践能力。

    面对对象程序设计考卷

    - **类**是面向对象编程的基本单位之一,它是一种抽象的数据类型,用来描述具有相同的属性和行为的对象集合。 - **对象**是类的一个实例,每个对象都有自己的状态和行为。 #### 2. 构造函数的理解 - 构造函数是用来...

    POO:面向对象的程序设计

    在Java中,我们可以使用抽象类(abstract class)和接口(interface)来实现抽象。 6. **接口**: 接口是一种完全抽象的类型,它只包含常量和抽象方法。接口可以被类实现(implements),使得类必须实现接口中所有...

    程序员面试题软件工程生命周期,设计模式的原则,面向对象

    4. **抽象**:通过抽象类或接口来定义一个类族共同的特征和行为,而具体的实现则留给子类去完成,提高了代码的复用性和灵活性。 ### 示例:工厂模式 工厂模式是面向对象设计模式之一,用于提供创建对象的接口,但...

    面向对象软件工程设计课题

    在面向对象编程(OOP)阶段,我们会依据OOD模型生成具体的C++或Java代码,如示例中的CATM和CAccount类,它们分别代表ATM机和银行账户,通过成员函数实现业务逻辑。 相对于传统的结构化方法,面向对象方法有显著的...

Global site tag (gtag.js) - Google Analytics