代碼優雅寫法之多態

timg.jpg

扯淡

好的代碼 更多的也是爲了後期維護,哪怕後期不須要你來維護 ,清晰乾爽的代碼也會爲做者留下好的印象java

而且 在工做團隊中 能夠施加影響力bash

用多態 消滅 if else switch

業務場景

小學一年級有 語文 數學 英語老師上課, 目前課程表還沒出來 須要將上課功能實現ide

程序語言 Java語言ui

代碼實現 之 瀑布流

該方法提供了三位老師的教學任務,
      實際業務場景會比這個複雜的多   
      ------------------------------------------------------------
      這樣的寫法有點體現不出做者的水平,
      當業務塊多時 一個方法太大,有些偏激(裝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. 將業務功能拆分 以多態的形式表達出來 執行者各司其職 主流程負責調度 業務模塊執行業務
相關文章
相關標籤/搜索