该方法提供了三位老师的教学任务,
实际业务场景会比这个复杂的多
------------------------------------------------------------
这样的写法有点体现不出作者的水平,
当业务块多时 一个方法太大,有些偏激(装B)的工程师成之为 一坨
用多态的方式写 可读性好 代码水平高(个人认为)~~
public void
teach
(String course){
if
("Chinese".equals(course)){
Teacher teacher=new
Teacher
(.....);
teacher
.teach
("我爱北京天安门");
if
("Math".equals(course)){
Teacher teacher=new
Teacher
(.....);
teacher
.teach
("
5
+
2
+
1
=?");
if
("English".equals(course)){
Teacher teacher=new
Teacher
(.....);
teacher
.teach
("what is your name?");
复制代码
代码实现 之 多态
业务多态------>教学任务
教师类接口 将用于实际教学过程中的控制教什么内容
public Interface Teacher{
public void teach();
语文教师 实现接口
public class ChineseTeacher implements Teacher{
public void teach(){
System.out.printf("鄙人教语文 我爱北京天安门");
数学教师 实现接口
public class MathTeacher implements Teacher{
public void teach(){
System.out.printf("鄙人教数学 万物皆数 1+1=?");
英文教师 实现接口
public class EnglishTeacher implements Teacher{
public void teach(){
System.out.printf("鄙人教英文 擅长法语 what is your name?");
路由规则多态 -------->执行者
定义教师类枚举 以多态的形式
public enum TeacherEnum{
CHINESE_TEACHER{
@Override
public Teacher init() {
return new ChineseTeacher ();
MATH_TEACHER{
@Override
public Teacher init() {
return new MathTeacher ();
ENGLISH_TEACHER{
@Override
public Teacher init() {
return new EnglishTeacher ();
public abstract Teacher init();
public void teach(String course){
assert(course);
TeacherEnum teacherEnum= TeacherEnum.valueof(course);
teacherEnum.init().teach();
复制代码
总结
将路由规则任务 以多态的形式表达出来 确定执行者 排除掉 if else switch
将业务功能拆分 以多态的形式表达出来 执行者各司其职 主流程负责调度 业务模块执行业务