- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用面向对象技替代switch-case和if-else
使用面向对象技术替代switch-case和if-else
??????? 在日常开发中,常常会作一些状态判断,用到swich-case与if-else。在面向对象的环境里,有两种方式可以替代它们。一种是使用继承子类的多态,另一种是使用state模式。它们使用对象的间接性有效地摆脱了传统的状态判断。举个例子
??????? 在日常开发中,常常会作一些状态判断,用到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.使用继承子类多态
使用继承子类多态的方式,通常对于某个具体对象,它的状态是不可改变的(在对象的生存周期中)。
!--[if !vml]--!--[endif]--
现在使用四个子类分别代表四种类型的方法。这样就可以使用多态将各个方法的具体逻辑分置到子类中去了。
在抽象基类Method中可以提供创建子类实例的静态方法,当然也可以使用Simple Factory模式。对于getMethod()方法,延迟到子类中实现;对于safeMethod()方法和passwordRequired()方法,提供一个默认的实现,这个实现应该符合绝大部分子类的要求,这样的话,对于少数不符合默认实现的子类只需override相应方法即可。
abstractMethod.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 f
您可能关注的文档
最近下载
- 年度赛课外拓展阅读《走近创世神话感受中外异同》教学设计1.docx
- 新版ISO13485-2016医疗器械质量管理体系全套GMP手册程序记录文件.docx
- 心理咨询师(中科院心理研究所)10套题汇总题库-下(多选题汇总).docx
- 北京市轨道交通房山线岩土工程勘察报告.doc
- 微积分(二)(浙江大学)中国大学MOOC 慕课 2021章节测验期末考试答案.docx
- 2023年电子科技大学成都学院计算机科学与技术专业《计算机网络》科目期末试卷A(有答案).docx VIP
- 第一部分LDTH系列电磁流量计.PDF
- 李前程编《建筑力学》(第2版)第六章.ppt VIP
- 心理咨询师(中科院心理研究所)10套题汇总题库-上(单选题汇总).docx
- Defensics健壮性测试工具测试方案.docx
文档评论(0)