代码优雅写法之多态

1,068 阅读2分钟

timg.jpg

扯淡

好的代码 更多的也是为了后期维护,哪怕后期不需要你来维护 ,清晰干爽的代码也会为作者留下好的印象

并且 在工作团队中 可以施加影响力

用多态 消灭 if else switch

业务场景

小学一年级有 语文 数学 英语老师上课, 目前课程表还没出来 需要将上课功能实现

程序语言 Java语言

代码实现 之 瀑布流


      该方法提供了三位老师的教学任务,
      实际业务场景会比这个复杂的多   
      ------------------------------------------------------------
      这样的写法有点体现不出作者的水平,
      当业务块多时 一个方法太大,有些偏激(装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?");
             }             
      }        

代码实现 之 多态

  1. 业务多态------>教学任务
            教师类接口 将用于实际教学过程中的控制教什么内容
             
            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?");
                        }
              }

  1. 路由规则多态 -------->执行者
           定义教师类枚举 以多态的形式
           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();
           }
  1. 效果

           public void teach(String course){
                      assert(course);
                      TeacherEnum teacherEnum= TeacherEnum.valueof(course);
                      teacherEnum.init().teach();
           }
          

总结

  1. 将路由规则任务 以多态的形式表达出来 确定执行者 排除掉 if else switch
  2. 将业务功能拆分 以多态的形式表达出来 执行者各司其职 主流程负责调度 业务模块执行业务