java命令模式用在哪,Java:在以下代码中使用命令模式

I have code similar to following:

void processObjectRecursively(Object obj)

{

Field[] fields = obj.getClass().getDeclaredFields();

for(Field field : fields)

{

FieldType type = FieldUtils.getType(field); // FieldType is enum

Object value = field.get(obj);

switch(type)

{

case A:

processObjectRecursively(value);

continue;

case LIST:

processList((List>)value);

continue;

case B:

processB(value);

continue;

case C:

processC(value);

continue;

}

}

}

void processList(List> list)

{

for(Object obj : list)

{

processObjectRecursively(obj);

}

}

void processB(Object obj)

{

// do something

}

void processC(Object obj)

{

// do something

}

Now. I don't like this long switch case. So I'm thinking of creating commands and populating a Map with them where the type is the key and the value is its corresponding command object. With this, the method would look something like:

void processObjectRecursively(Object obj)

{

Field[] fields = obj.getClass().getDeclaredFields();

for(Field field : fields)

{

FieldType type = FieldUtils.getType(field); // FieldType is enum

Object value = field.get(obj);

Command command = commandMap.get(type);

command.execute(value, this); // 'this' needed for calling processObjectRecursively()

}

}

But for this I will need to create one interface and four more classes. So is this approach okay or is it over-engineered? Can you suggest any other simpler approach to achieve the same effect?

解决方案

I agree its always better to avoid switch case statement. So creating a command map would do. Another easier approach could be to add the process method inside your enum so that every enum type knows how to process the data.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值