请问下 :我现在有个类,目前类里的代码已经有700多行了,类里有个检验的方法,这个方法大致都是一些判断验证操作
if(类型1){
类型1的一些判断验证操作
if(1.1){
数据验证操作
}else if(1.2){
数据验证操作
}
} else if(类型2){
类型2的一些判断验证操作
if(2.1){
数据验证操作
}else if(2.2){
数据验证操作
}
}else if(类型3){
类型2的一些判断验证操作
if(3.1){
数据验证操作
}else if(3.2){
数据验证操作
}else .......
就是这样的一些验证判断写了700多行代码。现在,同事说我这个类代码太多,判断逻辑太多,可能会造成以后不易维护。叫我考虑用一种设计模式或者其他方式将这个类重写下,让这个类简洁清晰些,请问各位,我应该怎么做呢。我经验不足,对设计模式不是怎么熟悉,请各位帮忙指点指点,看看有什么其他经验、方法可以借鉴!
可根据以下步骤,完成重构:
1、将if-else 抽取出来,构建出一个集成体系,这属于策略模式
父类为strategy,子类为各种情况下的校验实现
2、在原方法中if-else分支,面向抽象编程
使用简单工厂,根据你的类型,从配置文件取出相应实现
strategy = Factory.getDetailStrategy(type);
strategy.doCheck();
用到的设计模式如下:
1、工厂模式+配置文件
2、策略模式
你仔细想想经过以上步骤之后,以后如果新添加一种校验,你是不是很容易的可以实现?
1、你只需要添加一个strategy的子类,实现新的校验算法。
2、然后在配置文件中,添加一种新的算法的配置即可。
总结:
面向对象编程的终极目的是:代码好维护,易扩展、够灵活。
而设计模式是将面向对象编程发挥到极致的途径。
看你这些问题应该都是传入状态,然后根据状态执行对应的逻辑;在设计模式中有一种‘状态设计模式’应该可以满足你的需求;具体怎么用可以百度一下,
我的建议:首先整理下验证规则,毕竟你这么多验证规则,抽象出共用的统一到抽象类中,不同的放置在具体子类中,然后把这些规则与条件进行绑定。
1.可以用enum 枚举来设置你的条件
2.可以用设置常量的方法
如:public class constant() {
public static final String CONDTION_1 = "1";
public static final String CONDTION_2 = "2";
Public static Map map = new HashMap();
static {
map .put("CONDTION_1",CONDTION_1);
map .put("CONDTION_2",CONDTION_2);
}
}
[size=medium]你可以代码抽取成方法或类就可以解决了,与设计模式没什么关系也是可以解决的啊,总之达到代码清晰。另外,java源代码很多类文件是大于700行的啊。[/size]
class Checker {
void check(data) {
docheck(data);
Checker sub = getSubChecker(data);
if(sub!=null){sub.check(data);}
}
abstract void docheck(data);
abstract Checker getSubChecker(data);
}
可以用组合模式和策略模式
把验证的代码抽取出一个方法,以后调用这个方法就行,这样可以减少你的思考量和达到信息隐藏的效果
策略