重构没有什么出处,是我平时经常使用而总结出来的。欢迎您发表任何改进意见或建议。我相信一定还有其他比较好的重构可以解决类似的问题。 
我曾无数次面对的一个代码坏味道就是,使用异常来控制程序流程。您可能会看到类似的代码:
public class Microwave {
private MicrowaveMotor Motor;//getter setter public Boolean start(Object food) {
Boolean foodCooked = false;
try {
Motor.Cook(food);
foodCooked = true;
} catch (InUseException e) {
foodcooked = false;
}
return foodCooked;
}
}
异常应该仅仅完成自己的本职工作:处理异常行为。大多数情况你都可以将这些代码用恰当的条件判断替换,并进行恰当的处理。下面的代码可以称之为契约式设计,因为我们在执行具体工作之前明确了Motor类的状态,而不是通过异常来进行处理。
public class Microwave {
private MicrowaveMotor Motor;//getter setter
public Boolean start(Object food) {
if (Motor.IsInUse) return false;
Motor.Cook(food);
return true;
}
}

重构18-Replace exception with conditional(条件替代异常)的更多相关文章

  1. 重构第18天 用条件语句来代替异常(Replace exception with conditional)

    理解:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断. 详解: 重构前代码: public class Microwave { private IMicrowave ...

  2. java异常—检查异常(checked exception)和未检查异常(unchecked exception)

    网易面试要我画异常的结构图,什么是检查异常,什么是非检查异常,我当时的表情是这样的,.我看过,忘了.没办法,继续看,写博客掌握. 先来看看异常的结构图,建议你结合JDK一起看. 可以看出异常的家族势力 ...

  3. java中为什么把Checked Exception翻译成受检的异常?

    6.Checked Exception(受检的异常) 马克-to-win:为什么我大胆的把Checked Exception翻译成受检的异常?因为这类异常,编译器检查发现到它后会强令你catch它或t ...

  4. JavaScript利用replace更改所有符合条件字符

    利用replace替换字符串时,在正常使用情况下默认只能更改匹配到的第一个字符 var a=new String("fffffddd"); console.log(a.replac ...

  5. spring对bean的高级装配之基于@Conditional条件化装配

    上篇介绍了如何基于profile来条件化创建bean,spring会根据profile的激活状态来进行创建;这篇介绍如何基于spring4.0引入的@Conditional和Condition接口来更 ...

  6. C# 6.0:Exception Filter——带条件的异常处理

    C#6.0 对异常处理有两处改进,一个是在上一篇文章中我们讨论了的在catch和finally中使用await,另一个是exception filter.在catch和finally中使用await是 ...

  7. Error与Exception的区别,Java常见异常Execption总结

    错误和异常的区别(Error vs Exception) 错误和异常的区别(Error vs Exception) 今天面试问了这样一个问题,"Error" 和 "Exc ...

  8. 【转】【C#】异常类 Exception 枚举所有类型的异常

    一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...

  9. [转]java异常中Exception捕获不到的异常

    一 概念 众所周知java提供了丰富的异常类,这些异常类之间有严格的集成关系,分类为 父类Throwable Throwable的两个子类Error和Exception Exception的两个子类C ...

随机推荐

  1. GridView九宫图

    了解下 <!--android:numColumns="auto_fit"--列数设置为自动: android:columnWidth="90dp"--每 ...

  2. 为什么 Apple 开发者网站关闭是件好事?

    作者:趋势科技 Apple 的开发者中心网站在 7 月 18 日因为安全漏洞或攻击而关闭.在他们的通知里,Apple 公司表示,这起安全事件可能导致开发商的姓名.通讯地址和电子邮件地址被盗取,虽然该公 ...

  3. RS232串口用事件接受数据(一问一答)

    private void button1_Click(object sender, EventArgs e) { serialPort1.Open(); serialPort1.DataReceive ...

  4. Mongo数据模型

    Mongo数据模型 一个Mongo系统(参考上述部署)包含一组数据库 一个 database 包含一组collection 一个 collection 包含一组document 一个 document ...

  5. OC三种方法实现定时器

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 在iOS中有很多方法完成定时器的任务,例如 NSTimer.CADisp ...

  6. C#判断一个类中有无"指定名称"的方法

    C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...

  7. Java数据类型简单认识

    Java是一种强类型编程语言,因而在声明变量的时候必须声明数据类型,java语言有基本数据类型和引用数据类型这两大数据类型,基本数据类型有8种分别是4种整型.2种浮点类型.1种用于Unicode表示字 ...

  8. flash 定义主舞台窗口大小

    1:[SWF(width=100 height=100)] 写在主类上面2:设置stageScaleMode属性为false;

  9. 个推推送Android问题检测

    1.获取不到CID问题: 1.      查看配置文件是否有问题,appkey.appsecret.appid是否有空格存在. 2.      相关权限是否全部添加. 3.      manifest ...

  10. IAR USING PRE- AND POST-BUILD ACTIONS

    Using pre-build actions for time stamping If necessary, you can specify pre-build and post-build act ...