`

【面向对象设计模式】 接口型模式 (一)

 
阅读更多

.

.

作者:万境绝尘

转载请注明出处:http://blog.csdn.net/shulianghan/article/details/19028507

.


接口型模式组成: 该模式包括适配器(Adapter)模式,外观(Facade)模式,合成(Composite)模式,桥接(Bridge)模式四种模式;


类的接口 :

-- 前置条件 : 接口A, 类B, 类B实现接口A;

-- 允许访问 : 类A允许其它类的对象可以访问类B的 方法 与 字段, 类A 是类B的接口;

-- 实现关系 : 类B 方法需要实现 类A接口的方法名表示的操作, 类A 的实现就是 类B 中方法体的代码;


接口与实现的概念 : 接口 与 实现 二者是分离的, Java允许多个类实现同一个接口, 提供相同的功能; 也允许一个类实现多个接口;

-- 接口: 对象必须遵循的承诺;

-- 实现 : 对象如果履行承诺;



1. 接口与抽象类



接口与抽象类的区别 : 即使抽象类中全是抽象方法, 看起来与接口类似, 但是还是与接口有很大的不同;

-- 实现继承个数 : 类A 可以实现多个接口, 但是只能继承一个抽象类;

-- 抽象方法个数 : 接口中必须都是抽象方法, 抽象类中可以包含具体方法;

-- 是否使用字段 : 接口中只能创建 static final 常量字段, 抽象类中可以声明和使用任何类型字段;

-- 方法的描述符 : 接口中方法必须是public修饰, 抽象类中可以是任何限定;

-- 是否构造函数 : 接口没有构造函数, 抽象类可以有构造函数;


C语言与Java在接口方面的区别 : C语言中只有抽象类, 没有接口, Java语言中二者皆有;


接口作用 : 如果不能使用接口, 完全可以使用抽象类来代替, 接口在多层开发中发挥很大作用, 例如在J2EE中的MVC架构;


实际例子 : 火炮 和 坦克 都属于装甲车, 二者的应用场合各有不同, 但是它们有相同之处, 可以定义成接口 :

public interface Panzer {
	
	abstract int getSpeed();	//获取速度
	public double getCaliber();	//获取口径
	void fire();				//开火
	
}


从上面的例子列举接口的一些特性 :

-- 抽象方法 : 接口中的方法都是抽象方法, 不管有没有abstract声明;

-- 公开方法 : 接口中的方法都是公开方法, 不管有没有public修饰;

-- 不完全公开 : 接口中的方法在包内是公开的, 如果没有public修饰, 包内可以访问, 但是包外不能访问, 如果想要在包外访问该接口, 需要使用public修饰;

-- 接口继承: 接口A 可以 继承另一个接口B, 例如 List 接口就继承了 Collection 接口;

-- 接口不一定有方法 : 没有方法的接口可以成为标记接口, 标记接口的作用 - 一个接口处于很高的继承层次, 其方法不一定适用所有的类, 如果我们希望这个继承体系存在, 可以创建一个标记接口, 其中不定义任何方法;

-- 接口字段 : 接口中只能声明 static final 字段, 在接口实现类中可以直接调用这些字段, 其它的实例字段不能再接口中声明;

-- 接口构造函数 : 接口中不能定义构造函数, 如果定义了就会使实现类中必须实现这一特定构造函数, 不实用;



2. 接口与职责


接口的优势 : 接口限制了对象之间的交互过程, 这样的好处是即使接口的实现类发生了巨大的变化, 接口还是不会改变的, 调用接口的类仍正常运行;

-- eg : 在上面的 Panzer 实现类编写的时候, 开发者必须实现该接口的三个方法, 这是必须遵循方法制定的契约;


实现类不必实现所有方法 : 实现类可以忽略接口中某些抽象类的调用, 但是必须提供一个空的方法体, 换言之, 接口还是要实现的, 但是可以不使用;

-- 桩的概念 : stub, 桩 是接口的实现类, 实现了类中的所有的方法, 但是这些方法都没有方法体, 没有实际意义;

-- 桩的作用 : 开发者如果实现一个接口的话, 需要将所有的抽象方法都实现一遍, 写起来很麻烦, 代码也很冗余, 这里可以继承 桩 , 然后实现自己感兴趣的方法;


接口声明常量 : 接口中只能存放 static final 类型的常量, 不能声明 变量, 如果定义一个 "String str;" 就会报错;

public interface Panzer {
	
	public static final String TANK_1 = "KV";
	public static final String CANNON_1 = "SU-51";
	
	abstract int getSpeed();	//获取速度
	public double getCaliber();	//获取口径
	void fire();				//开火
	
}

枚举 : 通常在接口中将有分组类别的常量定义为枚举 enum;

.


3. 不同场景的接口应用


适配器模式 : 适配类的接口 以 匹配客户端期待的接口; 如 类A 实现了需求, 但是其方法名不符合接口, 这里就需要使用适配器模式;

外观模式 : 为一组类 提供一个 简单接口;

合成模式 : 为单个对象与复合对象提供统一的接口;

桥接模式 : 解除抽象与现实之间的耦合, 使二者能够独立演化;

.

.

作者:万境绝尘

转载请注明出处 :http://blog.csdn.net/shulianghan/article/details/19028507

.


分享到:
评论

相关推荐

    设计模式可复用面向对象软件的基础.zip

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    设计模式:可复用面向对象软件的基础--详细书签版

    作者从多年的面向对象设计经验中精选了23个模式,这构成了该书的精华部份,每一个精益求精的优秀程序员都应拥有这本《设计模式》。”--larry o'brien, software development    “[设计模式]在实用环境下特别有用,...

    设计模式可复用面向对象软件的基础

    本书假设你至少已经比较熟悉一种面向对象编程语言,并且有一定的面向对象设计经验。当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的...

    从模式讲到设计模式再到面向对象设计模式

    从“模式”到“设计模式”,再到“面向对象设计模式”,这是一个从广泛到具体的过程。“设计模式”是一个广泛的概念,它既可以指建筑中的设计模式,也可以指软件开发中的设计模式等。“面向对象设计模式”是可复用...

    深入PHP 面向对象 模式与实践第3版(完整版) 35M

    首先介绍了PHP的OO特性,包括类声明、对象实例化、继承、方法与属性封装以及静态方法与属性、抽象类、接口、..., 本书适合每位PHP程序员进阶参考,帮助他们掌握PHP面向对象设计和开发的精髓,跻身高端PHP程序员之列。

    面向对象编程 接口与设计模式.ppt

    面向对象编程 接口与设计模式.ppt

    java设计模式(设计实例从面向对象的设计中精选出23个设计模式)

    本书假设你至少已经比较熟悉一种面向对象编程语言,并且有一定的面向对象设计经验。当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的...

    (经典)设计模式——可复用面向对象软件的基础(pdf)

    本书假设你至少已经比较熟悉一种面向对象编程语言,并且有一定的面向对象设计经验。当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的...

    设计模式可复用面向对象软件的基础.

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    使用面向对象思想以及应用设计模式实现计算器

    01面向对象计算器_封装版 02面向对象计算器_继承多态虚方法版 ...04面向对象计算器_接口版 05面向对象计算器_构造方法进行参数传递 06面向对象计算器_简单工厂模式 07委托多态计算器 08计算器终极版_插件机制(反射)

    【软件】设计模式,可复用面向对象软件的基础(中文版)

    这些模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复 用性更好。它们帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。 一个熟悉这些模式的设计者不需要再去发现它们,而...

    深入PHP面向对象、模式与实践 (第2版)》 part2

     本书适合每位php程序员进阶参考,帮助他们掌握php面向对象设计和开发的精髓,跻身高端php程序员之列。 目录 第一部分 介绍  第1章 PHP:设计与管理  第二部分 对象  第2章 PHP与对象   第3章 对象基础...

    面向对象设计原则

    介绍了面对对象的七大原则:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则;

    讲解面向对象中多态 接口 抽象 重构 工厂模式

    本下例是讲解工厂模式 多态 接口 抽象 重构的经典下例子,结合一个尽可能简洁的实例来说明OOD、设计模式及重构。通过下面的代码,详细地阐述面向对象设计思想。体现了软件工程的三个主要目标:重用性、灵活性和扩展...

    设计模式可复用面向对象软件的基础(中文版)

    本书假设你至少已经比较熟悉一种面向对象编程语言,并且有一定的面向对象设计经验。当我们提及“类型”和“多态”,或“接口”继承与“实现”继承的关系时,你应该对这些概念了然于胸,而不必迫不及待地翻阅手头的...

    Java面向对象程序设计杨晓燕面向对象基本原则和模式.pptx

    一个类图的类名是必须的 第2页/共30页 Java面向对象程序设计杨晓燕面向对象基本原则和模式全文共30页,当前为第2页。 类的UML图 注意:属性和方法之前附加的可见性修饰符, "+"表示public,"-"表示private,"#"表示...

Global site tag (gtag.js) - Google Analytics