`
bingooh
  • 浏览: 53283 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

4.18-4.19 使用接口

 
阅读更多

与使用抽象类相比,使用接口的优点包括:

1.类更容易声明执行新的接口

 

2.接口更容易定义mixin,如同一个类可以实现Comparable、Iterable接口。在排序时,此类可视为Comparable类型,在迭代时,此类可视为Iterable类型

 

3.接口允许定义非层次化的类型框架,如一个人可以同时为歌手和作曲家,那么可让Person类同时实现Singer和SongWriter接口,而Singer和SongWriter接口直接没有任何层次关系

 

4.接口可提供更安全和更强大的功能,如帮助实现Wrapper

 

使用接口的缺点:

1.直接继承抽象类比实现接口更简单

 

2.一旦接口被发布并且被广泛实现,后期更改接口几乎是不可能的(可能很多实现类都需要进行修改)

 

使用接口建议:

1.在发布接口前进行广泛的测试和讨论

 

2.接口仅用于定义类型,不要用于定义常量。如以下代码可能给使用者造成疑惑,并且不能避免使用者实现此接口:

注:可使用枚举,静态工具类提供常量

 

//never do this
public interface BadInterface {
	static final String C1="C1";
	static final String C2="C2";
}

 

 

3.在发布接口时,建议同时提供简单实现类或骨架实现类(skeleton),如以下接口:

public interface IContainer {
	void add(String e);
	void remove(String e);
}

 

可提供一个简单实现类:

public class SimpleContainer implements IContainer {
	private List<String> list=new ArrayList<String>();

	public void add(String e) {
		list.add(e);
	}

	public void remove(String e) {
		list.remove(e);
	}

}

 

也可提供一个抽象的骨架实现类:

public abstract class AbstractContainer implements IContainer {
	public abstract void add(String e) ;
	public abstract void remove(String e) ;
	
	//此处可覆盖实现equals(),hashCode()等方法
}

 

在使用上,可直接继承骨架实现类、使用Wrapper进行包装,或者提供工具类方法,如下:

	public static IContainer getContainer(final String[] strs){
		if(strs==null||strs.length==0)return null;
		final List<String> list=new ArrayList<String>();
		for(String str:strs)list.add(str);
		
		return new AbstractContainer() {	
			@Override
			public void remove(String e) {
				list.remove(e);
			}
			
			@Override
			public void add(String e) {
				list.add(e);
			}
		};
	}

 

 

 

 

分享到:
评论

相关推荐

    中国电信通用Widget开放系统技术规范-终端引擎及应用开发分册(v1.0)

    4.18 运营商业务能力调用 8 4.19 安全 9 4.19.1 安装安全性 9 4.19.2 认证 9 4.19.3 签名 9 4.19.4 安装提示 9 4.19.5 API访问安全性 10 4.19.6 配置 10 4.19.7 版权管理(可选) 10 5 应用开发环境要求 11 5.1 代码...

    编程新手真言......

    8.2 编程能力,代码控制能力,复用与接口,轮子发明与使用 170 8.3 OO,模板,设计模式与设计 171 8.4 设计能力和程序员能力模型 172 8.4 自上而下设计和自下而上设计 173 8.5 大中型软件和复用与逻辑达成 177 8.6 ...

    UNIX环境高级编程_第2版.part1

     本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变  化很大。本书在保持了前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技  术发展。...

    UNIX环境高级编程_第2版.part2

     本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变  化很大。本书在保持了前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技  术发展。...

    大华播放SDK开发for linux.zip

    4 接口定义 13 4.1 播放文件 13 4.2 播放流数据 14 4.2.1 流方式历史数据(包括本地文件和远程录像文件)播放简单示例: 17 4.2.2 实时流数据播放简单示例: 18 4.3 回放控制 18 4.4 音频控制 20 4.5 数据回...

    河北省工伤保险协议医疗康复机构联网接口文档.docx

    第四章 接口说明 12 4.1 登录 12 4.2 登出 13 4.3 获取工伤信息 14 4.4 入院登记 17 4.5 撤消入院登记 18 4.6 医嘱信息预审核 19 4.7 医疗费信息上传 21 4.8 医疗费上传信息作废 24 4.9 已上传费用核准...

    Java数据库编程宝典2

    4.18 SQL数据类型的JDBC映射 4.19 SQL3数据类型 4.19.1 对象关系型数据库 4.19.2 使用SQL3数据类型 4.19.3 创建用户定义的数据类型 4.20 异常和日志 4.20.1 SQLException 4.20.2 SQLWarning 4.20.3 ...

    Java数据库编程宝典4

    4.18 SQL数据类型的JDBC映射 4.19 SQL3数据类型 4.19.1 对象关系型数据库 4.19.2 使用SQL3数据类型 4.19.3 创建用户定义的数据类型 4.20 异常和日志 4.20.1 SQLException 4.20.2 SQLWarning 4.20.3 ...

    Java数据库编程宝典1

    4.18 SQL数据类型的JDBC映射 4.19 SQL3数据类型 4.19.1 对象关系型数据库 4.19.2 使用SQL3数据类型 4.19.3 创建用户定义的数据类型 4.20 异常和日志 4.20.1 SQLException 4.20.2 SQLWarning 4.20.3 ...

    Java数据库编程宝典3

    4.18 SQL数据类型的JDBC映射 4.19 SQL3数据类型 4.19.1 对象关系型数据库 4.19.2 使用SQL3数据类型 4.19.3 创建用户定义的数据类型 4.20 异常和日志 4.20.1 SQLException 4.20.2 SQLWarning 4.20.3 ...

    NOCC工程系统集成2标招标文件-技术部分

    4.19 主变电所接入改造 98 5 功能要求 100 5.1 线网运营指挥系统 100 5.2 线网应急事件处置及协调系统 114 5.3 线网数据中心 123 5.4 线网统计分析 128 5.5 线网运营评估 136 5.6 线网信息服务 151 5.7 呼叫中心系统...

    ICE分布式程序设计中文版

    4.18 使用 Slice 编译器 118 4.19 Slice 与 CORBA IDL 的对比 119 4.20 总结 127 第 5 章 一个简单文件系统的 Slice 定义 137 5.1 本章综 137 5.2 文件系统应用 137 5.3 文件系统的 Slice 定义 138 5.4 完整的定义 ...

    单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序)

    4.19 PG160128A液晶图文演示 4.21 TG126410液晶串行模式演示 4.21 用带SPI接口的MCP23S17扩展16位通用IO端口 4.22 用TWI接口控制MAX6953驱动4片5×7点阵显示器 4.23 用TWI接口控制MAX6955驱动16段数码管显示 ...

    单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序暂缺)

    4.19 PG160128A液晶图文演示 4.21 TG126410液晶串行模式演示 4.21 用带SPI接口的MCP23S17扩展16位通用IO端口 4.22 用TWI接口控制MAX6953驱动4片5×7点阵显示器 4.23 用TWI接口控制MAX6955驱动16段数码管显示 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出cdata段 160 4.19.5 指定文档缩进 161 4.19.6 指定...

    TortoiseSVN和TortoiseMerge的中文帮助文档(chm格式)

    6. 本文使用的术语 1. 开始 1.1. 安装 TortoiseSVN 1.1.1. 系统要求 1.1.2. 安装 1.2. 基本概念 1.3. 开始试用 1.3.1. 创建版本库 1.3.2. 导入项目 1.3.3. 检出工作副本 1.3.4. 进行修改 1.3.5. 添加更多的文件 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出cdata段 160 4.19.5 指定文档缩进 161 4.19.6 指定...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出cdata段 160 4.19.5 指定文档缩进 161 4.19.6 指定...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出cdata段 160 4.19.5 指定文档缩进 161 4.19.6 指定...

Global site tag (gtag.js) - Google Analytics