场景说明
在开发场景中,经常会遇到折扣的业务需求,每个用户对应的级别不同,折扣情况也不同。 普通会员打9折,青铜会员打8.5折,金牌会员打8折等。 一般开发中最简单的方法是判断用户的等级,根据订单进行折扣处理。
场景示例
写了一个简单的例子。 如下所示。
//1学生2老师3代表校长
int type=1;
if(1==type ) {
System.out.println ('学生笑嘻嘻地说话) );
}elseif(2==type ) )。
System.out.println ('老师愉快地说话) );
} else {
System.out.println ('校长在认真说话);
}
上面的代码是我们经常做的事情。 代码少的时候,看起来非常清晰,但是如果代码多了,或者有更多的判断条件,那上面的代码就会更加混乱。 每次有修改时,都必须更改该部分的代码。
解决方法
可以将上述代码更改为多态性,以创建三个类。 学生Student、老师Teacher、校长HeadMater、父类为Person,这三个类都实现父类的方法say。 如下所示:
Person.class
package me.xueyao.service;
//*
* @author Simon.Xue
* @date 2019-12-01 14:31
*/
公共接口人员{
void say (;
}
Student.class
package me.xueyao.service.impl;
import me.xueyao.service.Person;
importorg.spring framework.stereotype.service;
//*
* @author Simon.Xue
* @date 2019-12-01 14:34
*/
@Service
publicclassstudentimplementsperson {
@Override
公共void say (
System.out.println ('学生笑嘻嘻地说话) );
}
}
Teacher.class
package me.xueyao.service.impl;
import me.xueyao.service.Person;
importorg.spring framework.stereotype.service;
//*
* @author Simon.Xue
* @date 2019-12-01 14:37
*/
@Service
publicclassteacherimplementsperson {
@Override
公共void say (
System.out.println ('老师愉快地说话) );
}
}
HeadMaster.class
package me.xueyao.service.impl;
import me.xueyao.service.Person;
importorg.spring framework.stereotype.service;
//*
* @author Simon.Xue
* @date 2019-12-01 14:41
*/
@Service
publicclassheadmasterimplementsperson {
@Override
公共void say (
System.out.println ('校长在认真说话);
}
}
测试方法
@Test
公共语音测试() {
Person student=new Student (;
student.say (;
Person teacher=new Teacher (;
teacher.say (;
Person headMaster=new HeadMaster (;
headMaster.say (;
}
最优化
上述方法基本上已经完成了优化,但每次都会发现创建对应对象的问题。 上面有三个类,所以要创建三个对象。 你能再优化一次吗?
目前,项目正在使用Sping框架,因此可以通过注入来完成优化。
首先,按如下方式创建person枚举类:
package me.xueyao.enums;
import lombok.allargsconstructor;
import lombok.Getter;
import me.Xue Yao.service.impl.headmaster;
import me.Xue Yao.service.impl.student;
import me.Xue Yao.service.impl.teacher;
//*
* @author Simon.Xue
* @date 2019-12-01 15:55
*/
@AllArgsConstructor
@Getter
公共事件人员事件{
student(1,'学生',Student.class )、
teacher(2,'老师',Teacher.class )、
headmaster(3,'校长',HeadMaster.class;
整数代码;
字符串msg;
Class clazz;
//*
获取类的名称,因为在自动注入Spring时,缺省名称是类名(首字母缩写)
* @param code
* @return
*/
publicstaticstringclassname (集成代码) {
个人价值:价值() ) ) )0)
if(value.getcode ).equals(code ) ) }
stringsimplename=value.getclazz ().getSimpleName );
simplename.substring(1;
return string.value of (simplename.charat (0) ).toLowerCase ) ) simpleName.substring(1) 1;
}
}
返回' ';
}
}
使用方法:
@Autowired
private Map personMap=new HashMap (;
@Test
公共语音测试() {
person map.get (person enums.class name (2) ).say );
}