快速业务通道

使用面向对象技术替代switch-case和if-else - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

使用面向对象技术替代switch-case和if-else

时间:2011-03-23 zhangjunhd

在日常开发中,常常会作一些状态判断,用到swich-case与if-else。在面向对象的环境里,有两种方式可以替代它们。一种是使用继承子类的多态,另一种是使用state模式。它们使用对象的间接性有效地摆脱了传统的状态判断。

举个例子。

Method.java

package com.zj.original; import com.zj.utils.NoMethodTypeException; public class Method {    private int _type;    public static final int POST = 0;    public static final int GET = 1;    public static final int PUT = 2;    public static final int DELETE = 3;    public Method(int type) {     _type = type;    }    public String getMethod() throws NoMethodTypeException {     switch (_type) {     case POST:       return "This is POST method";     case GET:       return "This is GET method";     case PUT:       return "This is PUT method";     case DELETE:       return "This is DELETE method";     default:       throw new NoMethodTypeException();     }    }    public boolean safeMethod() {     if (_type == GET)       return true;     else       return false;    }    public boolean passwordRequired() {     if (_type == POST)       return false;     else       return true;    } }

类Method中,存在四个状态Post、Get、Put和Delete。有一个switch-case判断,用于输出四种方法的描述信息;两个if-else判断,分别判断方法是否安全(只有Get方法是安全的),方法是否需要密码(只有Post方法不需要密码)。

1.使用继承子类多态

使用继承子类多态的方式,通常对于某个具体对象,它的状态是不可改变的(在对象的生存周期中)。

使用面向对象技术替代switch-case和if-else - 编程入门网

使用面向对象技术替代switch-case和if-else(2)

时间:2011-03-23 zhangjunhd

现在使用四个子类分别代表四种类型的方法。这样就可以使用多态将各个方法的具体逻辑分置到子类中去了。

在抽象基类Method中可以提供创建子类实例的静态方法,当然也可以使用Simple Factory模式。对于getMethod()方法,延迟到子类中实现;对于safeMethod()方法和passwordRequired()方法,提供一个默认的实现,这个实现应该符合绝大部分子类的要求,这样的话,对于少数不符合默认实现的子类只需override相应方法即可。

<<abstract>>Method.java

package com.zj.subclass; public abstract class Method {    public final static Method createPostMethod() {     return new PostMethod();    }    public final static Method createGetMethod() {     return new GetMethod();    }    public final static Method createPutMethod() {     return new PutMethod();    }    public final static Method createDeleteMethod() {     return new DelMethod();    }    abstract public String getMethod();    public boolean safeMethod() {     return false;    }    public boolean passwordRequired() {     return true;    } }

四个子类分别继承和override相应的方法。

PostMethod.java

package com.zj.subclass; public class PostMethod extends Method {    @Override    public String getMethod() {     return "This is POST method";    }    @Override   

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号