在www.infoq.com/cn网站上看了一本书叫《ThoughtWorks文集》,里边有一章讲的是“对象健身操”,其中提到了“拒绝使用else关键字”。那么如何“拒绝使用else关键字”呢?
1、如果程序中只有一个else,如下:
if(con){
dosomething();
}else{
dootherthings();
}
可以如下拒绝else:
if(con){
dosomething();
return;
}
dootherthings();
或者使用三元运算符:con ? dosometing() : dootherthings();
2、如果程序中有多个else,如下:
if(con1){
dothing1();
}else if(con2){
dothing2();
}else if(con3){
dothing3();
}......
可是使用策略模式或多态机制来拒绝else(还有很多其他方式),下面先介绍“策略模式”的方式:
首先讲一个使用if...else...的例子:
package ifelse.use;
public class UseIfElse {
public static void main(String args[]){
MyPaper myPaper = new MyPaper(PaperColor.RED);
if(myPaper.getMyPaperColor() == PaperColor.BLACK){
System.out.println("You need a black pen!");
}else if(myPaper.getMyPaperColor() == PaperColor.BLUE){
System.out.println("You need a blue pen!");
}else if(myPaper.getMyPaperColor() == PaperColor.RED){
System.out.println("You need a red pen!");
}else if(myPaper.getMyPaperColor() == PaperColor.WHITE){
System.out.println("You need a white pen!");
}
}
}
class MyPaper{
private PaperColor paperColor;
public MyPaper(PaperColor paperColor){
this.paperColor = paperColor;
}
public PaperColor getMyPaperColor(){
return this.paperColor;
}
}
enum PaperColor{
WHITE, BLACK, BLUE, RED
}
使用if...else...的弊端在于:不利于对程序的扩展,如果新添加了一个颜色类型,那么就得去修改程序再添加一个if...else...分支,根据“开-闭原则”的宗旨:对扩展开,对修改闭。显然是用if...else...已经go out了。
下面讲一个使用“策略模式”解决上述问题的办法:
package ifelse.no;
public class NoIfElse {
public static void main(String args[]){
MyPaper myPaper = new MyPaper(new White());
myPaper.choicePen();
}
}
interface PaperColor{
public void getPenColor();
}
class White implements PaperColor{
public void getPenColor(){
System.out.println("You need a white pen!");
}
}
class Red implements PaperColor{
public void getPenColor(){
System.out.println("You need a red pen!");
}
}
class Blue implements PaperColor{
public void getPenColor(){
System.out.println("You need a blue pen!");
}
}
class Black implements PaperColor{
public void getPenColor(){
System.out.println("You need a black pen!");
}
}
class MyPaper{
private PaperColor paperColor;
public MyPaper(PaperColor paperColor){
this.paperColor = paperColor;
}
public PaperColor getPaperColor(){
return this.paperColor;
}
public void choicePen(){
this.paperColor.getPenColor();
}
}
总结:
if...else...的每个分支语句都做一件事,因此我们可以把这么些事单独封装在一个类中,就有了White、Blue、Red、Black4个类,这四个类都实现了接口PaperColor,我们再定义一个MyPaper的类(此类具有类似负载均衡的作用,分按照不同的请求分别调用跟前面4个类中的一个)。这样就把if...else...屏蔽掉了。
接下来介绍使用“多态”机制来实现拒绝else:
package ifelse.no.Polymorphism;
public class NoIfElse_Polymorphism {
public static void main(String args[]){
MyPaper myPaper = new MyPaper();
myPaper.choice(new Black());
}
}
class White {
public void getPenColor(){
System.out.println("You need a white pen!");
}
}
class Red {
public void getPenColor(){
System.out.println("You need a red pen!");
}
}
class Blue {
public void getPenColor(){
System.out.println("You need a blue pen!");
}
}
class Black {
public void getPenColor(){
System.out.println("You need a black pen!");
}
}
class MyPaper{
public void choice(White white){
white.getPenColor();
}
public void choice(Red red){
red.getPenColor();
}
public void choice(Blue blue){
blue.getPenColor();
}
public void choice(Black black){
black.getPenColor();
}
}
总结:
此处使用的多态机制指:方法的重构,根据方法名相同儿参数不同的机制,来实现拒绝关键字。
注意:上述两种方式适用于同时只有一个分支被执行的情况。
参考:“java设计模式”之“策略模式”。
相关推荐
51单片机-C语言for语句do...while语句if...else...语句产生随机数rand()常用基本语句例程源码 do...while语句 for语句 if...else...语句 switch-case-break语句 while与do...while区别 while语句 不同类型数据的差异...
if...else if...else语句 1、语法结构 if (条件1) { 当条件1 为 true 时执行的代码块 }else if (条件2){ 当条件2 为 true 时执行的代码块 }else{ 当条件 1 和 条件 2 都不为 true 时执行的代码块 } if...else if......
WEB开发 之 JavaScript If...Else 语句.docx
if...else...语句 TX-1C学C语言
(1)使用if...else语句构造多分支,判断某一年是否为闰年。闰年的条件是符合下面二者之一:能被4整除,但不能被100整除;能被400整除。 (2)后从键盘输入数字1/2/3后,可显示抽奖得到的奖品;如果输入其它数字或字符显示...
2.if语句可以根据判定条件的结果,来决定执行给出的多种操作之一; if语句主要作用 01 if语句类型 02 1. 单分支if语句 2. 双分支if-else语句 3. 嵌套if语句 if语句基本流程 if(条件){ 语句序列; } false true ...
用InputBox和If then Else,if elseif,SelectCase三种方法判断分支函数的应用程序,.net源代码.
编写一个程序if...else,定义一个数,若大于或小于这个数则输出错误,等于则输出hello.if
if else语句.c
主要介绍了swtich/if...else的替代语句的相关资料,需要的朋友可以参考下
选择语句是程序设计的三大重要结构之一,若出错,会使得程序出现很多意想不到的问题。这里给出了常常出现的错误。
C语言中if-else语句的嵌套分析.pdf
使用策略模式和工厂模式彻底消除if-else分支
TIA博途WINCC的触摸屏VB脚本入门(IF THEN ELSEIF 判断语句)
if...else 5 for 6 switch case 8 while 9 do...while 10 break 11 continue 11 return 12 goto 13 相关语法 14 分号 14 大括号 15 注释 17 define 18 include 19 算术运算符 20 赋值 20 加,减,乘,除 21 取模 22 ...
javaCC语法分析(while、if...else...、for互相嵌套).pdf
主要介绍了Java中if...else语句使用的学习教程,是Java入门学习中的基础知识,需要的朋友可以参考下
c
elseif.js 嵌套if / else语句