`
ITCheng
  • 浏览: 73806 次
  • 来自: 北京
社区版块
存档分类
最新评论

面向对象的设计原则_针对接口编程

OO 
阅读更多

接口

  • 接口是一个对象中可以被另一个对象调用的一组方法
  • 一个对象可以有多个接口
  • 类型是一个对象的特殊接口
  • 不同的对象可以有相同的类型,一个对象可以有多种不同的类型
  • 一个对象只有通过它的接口才能被其他对象知晓
  • 接口是可插拔的关键

实现继承和接口继承

  • 实现继承(类继承)------ 一个对象的实现定义在另一个对象的实现的基础上
  • 接口继承 ------ 描述了一个对象什么时候可以代替另一个对象使用
  • Java为接口继承提供了专用的结构 - interface
  • Java的接口结构使专注于对象接口的设计更容易实现

接口的优缺点

  • 优点
    • 客户端不知道他们所使用对象的具体类型
    • 一个对象可以被另一个对象轻易地替换
    • 对象不需要硬连接到一个特殊类的对象,因此增加了灵活性
    • 松耦合
    • 增加了重用的机会
    • 增加了组合的机会,因为被包含的对象可以被实现了特定接口的其他对象替换
  • 缺点
    • 某种程度上增加了设计的复杂性

接口实例

Java代码 复制代码 收藏代码
  1. /**  
  2. * Interface IManeuverable provides the specification  
  3. * for a maneuverable vehicle.  
  4. */  
  5. public interface IManeuverable {   
  6.     public void left();   
  7.   
  8.     public void right();   
  9.   
  10.     public void forward();   
  11.   
  12.     public void reverse();   
  13.   
  14.     public void climb();   
  15.   
  16.     public void dive();   
  17.   
  18.     public void setSpeed(double speed);   
  19.   
  20.     public double getSpeed();   
  21. }   
  22.   
  23. public class Car implements IManeuverable {    
  24.     // Code here.    
  25. }   
  26.   
  27. public class Boat implements IManeuverable {    
  28.     // Code here.    
  29. }   
  30.   
  31. public class Submarine implements IManeuverable {    
  32.     // Code here.    
  33. }  
/**
* Interface IManeuverable provides the specification
* for a maneuverable vehicle.
*/
public interface IManeuverable {
	public void left();

	public void right();

	public void forward();

	public void reverse();

	public void climb();

	public void dive();

	public void setSpeed(double speed);

	public double getSpeed();
}

public class Car implements IManeuverable { 
	// Code here. 
}

public class Boat implements IManeuverable { 
	// Code here. 
}

public class Submarine implements IManeuverable { 
	// Code here. 
}

 

下面的方法只需要知道参数是机动车辆而不需要关心它到底属于哪个类(Car, Boat, Submarine)或者类所在的层次结构。

Java代码 复制代码 收藏代码
  1. public void travel(IManeuverable vehicle) {   
  2.     vehicle.setSpeed(35.0);   
  3.     vehicle.forward();   
  4.     vehicle.left();   
  5.     vehicle.climb();   
  6. }  
public void travel(IManeuverable vehicle) {
	vehicle.setSpeed(35.0);
	vehicle.forward();
	vehicle.left();
	vehicle.climb();
}

 

 

总结

使用该原则可以带来更灵活的设计,因为当我们想替换一个类的实现时,不需要改变原来的代码。

分享到:
评论

相关推荐

    JAVA面向对象详细资料

    2、针对接口编程,而不要针对实现类编程 54 3、多用组合,少用继承(包含实现) 54 4、为了交互对象之间的松耦合设计而努力 54 5、类应该对扩展开放,对修改关闭 54 6、依赖倒置,要依赖抽象,不要依赖具体类 54 36 ...

    我所理解的多态与设计模式

     面向对象程序设计(注意这里是面向对象,而不是基于对象)的一个很重要的设计原则是:针对接口编程,而不是针对实现编程!可是这样一句句很浅显的话,确包含了很多面向对象的知识在里面!  “什么是针对接口...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    本书为中南大学精品教材立项项目,分为上下两篇共21章,涵盖了面向对象技术中Java开发环境配置、程序设计基础、面向对象原理以及UML的知识。本书使用的开发环境是JDK 1.6+Eclipse 3.3+Rational Rose 2003,逐步引领...

    设计模式Demo

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    浅谈JavaScript中的接口实现

    在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概念的重要性可见一斑。但问题在于,在JavaScript的世界中,没有内置的创建或实现接口的方法...

    Java设计模式——工厂设计模式

    DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。 LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信。 核心本质: 实例化对象,用工厂方法...

    基于JavaSSH的网上书店系统

    的多层架构模型和针对接口编程的原则,系统设计中采用Java EE的三层结构,分为表现层、业务逻辑层和数据服务层。 关键词:网上书店系统; Struts + Sp ring +Hibernate; 表现层; 业务逻辑层;数据服务层; 针对接口编程

    二十三种设计模式【PDF版】

    整个设计模式贯穿一个原理:面对接口编程,而不是面对实现.目标原则是:降低耦合,增强灵活性. 建筑和软件中模式之异同 CSDN 的透明特别推崇《建筑的永恒之道》,认为从中探寻到软件的永恒之道,并就"设计模式"写了专门...

    设计模式(四)——工厂模式

    工厂模式 意义 工厂模式 实现了创建者和调用者的分离。...DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程(不要让类继承具体类,而是继承抽象类或者是实现 i

    北京百度java面试题大全

    面向对象编程:涉及类与对象、继承、多态、封装、抽象类、接口等面向对象编程的相关概念和原则。 集合框架:涵盖集合类(如List、Set、Map等)、迭代器、泛型等集合框架相关的知识。 异常处理:包括异常的分类、...

    数据库应用系统功能设计与实施.docx

    2.详细设计:是细化概要设计产生的功能模块,形成可编程的程序模块,用某种过程设计语言(PDL)设计程序模块的内部细节。3.关于软件总体设计 层次结构:系统—子系统—模块—子模块。软件系统的系统元素(子系统、...

    软件工程知识点

    结构化设计中的函数、过程,面向对象设计中的类、对象,它们都是模块。概要设计时并不需要说明模块的内部细节,但是需要进行全部的有关它们构造的定义,包括功能特征、数据特征和接口等。 在进行概要设计时,模块的...

    亮剑.NET深入体验与实战精要2

    13.6.2 针对接口编程,而非(接口的)实现 481 13.6.3 开放-封闭法则(OCP) 482 13.6.4 Liskov替换法则(LSP) 485 13.6.5 单一职责原则(SRP) 486 13.6.6 依赖倒置原则(DIP) 486 13.6.7 接口分离原则(ISP) ...

    亮剑.NET深入体验与实战精要3

    13.6.2 针对接口编程,而非(接口的)实现 481 13.6.3 开放-封闭法则(OCP) 482 13.6.4 Liskov替换法则(LSP) 485 13.6.5 单一职责原则(SRP) 486 13.6.6 依赖倒置原则(DIP) 486 13.6.7 接口分离原则(ISP) ...

    基于JSP的网上书店系统

    基于JSP的网上书店管理系统,源程序 ...整个BookStore应用体现了面向对象开发中的多层架构模型和针对接口编程的原则。读者可以在BookStore应用基础之上轻易地扩展,实现更多模块,或用其他实现方法替换现有的功能模块。

    软件框架设计的艺术

    第6章 面向接口而非实现进行编程 85 6.1 移除方法或者字段 87 6.2 移除或者添加一个类或者接口 88 6.3 向现有的继承体系中添加一个接口或者类 88 6.4 添加方法或者字段 88 6.5 Java中接口和类的区别...

    领域驱动设计与模式实战

    10.4 面向方面编程 10.4.1 热门话题有哪些 10.4.2 AOP术语定义 10.4.3 .NET中的AOP 10.4.4 小结 10.5 小结 第11章 关注UI 11.1 提前结语 11.2 模型-视图-控制器模式 11.2.1 示例:Joe的Shoe Shop程序 11.2.2 通过...

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    ◆ 广泛介绍了各种面向对象的编程技术 ◆ 重点是核心的数据结构,而不是非必要的C++语言语法 ◆ 说明了类和ADT在问题解决过程中的作用 ◆ 诠释了ADT的主要应用,如查找航班图、事件驱动的模拟和八皇后问题 ◆ ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    1.1.5 要点5:ASP.NET是面向对象的 1.1.6 要点6:ASP.NET支持所有的浏览器 1.1.7 要点7:ASP.NET易于部署和配置 1.2 ASP.NET的演变 1.2.1 ASP.NET1.0和ASP.NET1.1 1.2.2 ASP.NET2.0 1.2.3 ASP.NET3.5 ...

Global site tag (gtag.js) - Google Analytics