策略模式减少if/else代码

在很多需要时候,需要对功能进行扩展,使用if/else写起来虽然简单方便,但是当需要处理的东西变多时,就会让代码看起来臃肿不够优雅。此处,将通过策略模式的方式,实现直接将对应的值去执行相关的功能。
代码如下:
先写一个抽象类,抽象出共有的方法。

public interface Person {

    public static final String PREFIX = "person";

    public static final String COMMON_PERSON = "common";

    public static final String SUPER_PERSON = "super";

    public static final String GOD_PERSON = "god";

    void sing();

    void jump();

    void rap();

    void basketball();
}

实现对应功能的类去继承这个抽象类
CommonPerson .class

@Component(Person.PREFIX+Person.COMMON_PERSON)
public class CommonPerson implements Person{

    @Override
    public void sing() {
        System.out.println("just common sing level!!!");
    }

    @Override
    public void jump() {
        System.out.println("just common jump level!!!");
    }

    @Override
    public void rap() {
        System.out.println("just common rap level!!!");
    }

    @Override
    public void basketball() {
        System.out.println("just common basketball level!!!");
    }
}

GodPerson.class

@Component(Person.PREFIX+Person.GOD_PERSON)
public class GodPerson implements Person{

    @Override
    public void sing() {
        System.out.println("god like sing level!!!");
    }

    @Override
    public void jump() {
        System.out.println("god like jump level!!!");
    }

    @Override
    public void rap() {
        System.out.println("god like rap level!!!");
    }

    @Override
    public void basketball() {
        System.out.println("god like basketball level!!!");
    }
}

SuperPerson.class

@Component(Person.PREFIX+Person.SUPER_PERSON)
public class SuperPerson implements Person{
    @Override
    public void sing() {
        System.out.println("super sing level!!!");
    }

    @Override
    public void jump() {
        System.out.println("super jump level!!!");
    }

    @Override
    public void rap() {
        System.out.println("super rap level!!!");
    }

    @Override
    public void basketball() {
        System.out.println("super basketball level!!!");
    }
}

在使用时,可以通过Map注入的方式即可,如下:

@Service
public class PersonService {

	//Map中自动注入了上面三个bean的实例信息
    @Resource
    Map<String,Person> personMap;

    public void output(String personLevel){
        Person person = personMap.get(Person.PREFIX+personLevel);
        person.sing();
        person.jump();
        person.rap();
        person.basketball();
    }

}

根据业务类型,实现不同的逻辑代码,即对if/else进行了优化。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值