effective_java 第34条:用接口模拟可伸缩的枚举
例如:
/**
* 加减乘除枚举
* Created by yulinfeng on 8/20/17.
*/
public enum Operation {
PLUS {
double apply(double x, double y) {
return x + y;
}
},
MIUS {
double apply(double x, double y) {
return x - y;
}
},
TIMES {
double apply(double x, double y) {
return x * y;
}
},
DEVIDE {
double apply(double x, double y) {
return x / y;
}
}; abstract double apply(double x, double y);
}
同时提到当需要新增一个操作符时直接在源代码中新增即可,且不会忘记重写apply方法,但从软件开发的可扩展性来说这并不是一个好的方法,软件可扩展性并不是在原有代码上做修改,如果这段代码是在jar中的呢?这个时候就需要接口出场了,我们修改上述例子:
/**
* 操作符接口
* Created by yulinfeng on 8/20/17.
*/
public interface Operation {
double apply(double x, double y);
}
/**
* 基本操作符,实现自Operation接口
* Created by yulinfeng on 8/20/17.
*/
public enum BasicOperation implements Operation{
PLUS("+") {
public double apply(double x, double y) {
return x + y;
}
},
MIUS("-") {
public double apply(double x, double y) {
return x - y;
}
},
TIMES ("*") {
public double apply(double x, double y) {
return x * y;
}
},
DEVIDE ("/") {
public double apply(double x, double y) {
return x / y;
}
};
private final String symbol; BasicOperation(String symbol) {
this.symbol = symbol;
}
}
当我们需要扩展操作符枚举的时候只需要重新实现Operation接口即可:
/**
* 扩展操作符
* Created by yulinfeng on 8/20/17.
*/
public enum ExtendedOperation implements Operation {
EXP ("^") {
public double apply(double x, double y) {
return Math.pow(x, y);
}
},
REMAINDER ("%") {
public double apply(double x, double y) {
return x % y;
}
};
private final String symbol; ExtendedOperation(String symbol) {
this.symbol = symbol;
}
}
effective_java 第34条:用接口模拟可伸缩的枚举的更多相关文章
- Effective Java 第三版——38. 使用接口模拟可扩展的枚举
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Javascript 接口模拟
Javascript接口模拟可以通过三种方式实现文档手段(注释).辅助类和鸭式辨. 第一种和第二种只形式上体现没有真正的实现. 鸭式辨实现原理是:"只要能像鸭子一样叫和走就是鸭子" ...
- Yahoo!网站性能最佳体验的34条黄金守则
Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客并在各种会议上参与探讨.最佳实践的核心就是 ...
- (转)雅虎WEB前端网站优化 -- 34条军规
雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). 1.Minimize HTTP Requests 减少HTTP请求 ...
- 【转】SoapUI5.0创建WebService接口模拟服务端
原文:http://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 MathU ...
- YAHOO 34 条前端优化建议
雅虎团队经验:网站页面性能优化的34条黄金守则 1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通 ...
- 雅虎WEB前端网站优化 -- 34条军规
雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). 1.Minimize HTTP Requests 减少HTTP请求 ...
- oracle提高查询效率的34条方法
注:本文来源:远方的守望者 <oracle提高查询效率的34条方法> oracle提高查询效率的34条方法 1.选择最有效率的表名顺序 (只在基于规则的优化器中有效): ORACLE的解 ...
- SoapUI5.0创建WebService接口模拟服务端(转)
转载自:https://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 Mat ...
随机推荐
- HADOOP高可用机制
HADOOP高可用机制 HA运作机制 什么是HA HADOOP如何实现HA HDFS-HA详解 HA集群搭建 目标: 掌握分布式系统中HA机制的思想 掌握HADOOP内置HA的运作机制 掌握HADOO ...
- js查找、自组织数据
function search(arr, data) { ; i < arr.length; ++i) { if (arr[i] == data) { return true; } } retu ...
- 博客搬家一下到CSDN
博客搬家一下到CSDN:http://blog.csdn.net/weixin_33409246
- ElasticSearch改造研报查询实践
背景: 1,系统简介:通过人工解读研报然后获取并录入研报分类及摘要等信息,系统通过摘要等信息来获得该研报的URI 2,现有实现:老系统使用MSSQL存储摘要等信息,并将不同的关键字分解为不同字段来提供 ...
- magic
- 解决JNI native 线程不能正常退出的问题
本人刚涉足学习C++ 安卓 java,遇到这个棘手的问题,多谢博客园作者lknlfy 看了你的博客解决了这个问题,此文转发, 方便日后学习 以下内容转自lknlfy作者博客 传送门:http:// ...
- load data语句实验报告
1.创建和选择数据库 如果管理员在设置权限时为您创建数据库,则可以开始使用它.否则,您需要自己创建它: 创建数据库不会选择它来使用; 你必须明确地这样做.要创建menagerie当前数据库,请使用以下 ...
- OLLVM特性、使用原理
一.OLLVM特性 目前ollvm支持的特性有以下几种: 指令替换 -mllvm -sub 虚假控制流 -mllvm -bcf 打平控制流 -mllvm -fla 函数(Funtions)注解 二.指 ...
- QVector常见使用方法
仅在此简单介绍QVector的一些常见函数,有兴趣的可以查下QT,在QT中介绍的很详细 构造函数,QVector的构造函数很多样化,常见的有 QVector() 无参的构造函数 QVector(int ...
- Linux下安装Python3.6
1.安装Python3.6 依赖环境安装 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-deve ...