java方法增強的三種方式

2021-08-23 14:38:33 字數 1743 閱讀 4185

在實際開發中,我們往往需要對某些方法進行增強,常用的方法增強的方式有三種,下面就簡單介紹一下三種方式的使用以及特點

需求:有乙個animal介面,提供了抽象方法eat(),有乙個貓類實現了animal介面,重寫了eat方法

class animal 

class cat implements animal

}class test

public static handlemouse(animal animal)

}

執行程式:

吃老鼠

要求對cat類中eat方法進行增強(吃老鼠之前抓老鼠)

1.解決方案一:繼承

新建乙個類supercat繼承cat,對eat方法進行重寫

class supercat extends cat 

}//測試

class test

public static handlemouse(animal animal)

}

執行程式:

抓老鼠

吃老鼠

這種方法的前提是能夠控制被增強方法的類的構造,而在面向介面程式設計中, 往往不能明確實現類,比如jdbc連線池需要對connection的close方法進行增強,將關閉連線改為歸還連線,而connection的實現類並不能確定(由各廠商提供),所以繼承的方式不能滿足這種需求

2.解決方案二:裝飾者設計模式

新建乙個類supercat實現animal介面,將animal作為其乙個成員屬性,對eat方法進行重寫

public class supercat implements animal 

@override

public void eat()

}//測試

public class test

public static handlemouse(animal animal)

}

執行程式:

抓老鼠

吃老鼠

這種方法要求裝飾類與被裝飾類要實現同乙個介面,如果介面的方法比較多,而只需要對其中乙個方法進行增強,則介面中的其他方法需要提供空實現,常用的乙個解決方案是定義乙個類實現該介面,並提供所有方法的空實現,裝飾類若要增強其中乙個方法只需繼承這個空實現類,並重寫相應的方法,如可以對上面解決方案進行改寫

//定義乙個animal的空實現類

animal animal;

this.animal = animal;

}public void eat()

}//定義supercat類

super(animal);

}public void eat()

}

public class test 

//不需要增強的方法

return method.invoke(cat);

}

});handlemouse(proxyinstance);

}public static void handlemouse(animal animal)

}

執行程式:

抓老鼠

吃老鼠

這種方式比較靈活,只需要被**類有實現的介面就行

java的執行緒的三種方式

編寫多執行緒程式是為了實現多工的併發執行,從而能夠更好地與使用者互動。一般有三種方法,thread,runnable,callable.runnable和callable的區別是,1 callable規定的方法是call runnable規定的方法是run 2 callable的任務執行後可返回值,...

Java 增強for迴圈,三種迭代的能否刪除

1 目的 簡化陣列和collection集合的遍歷 2 格式 for 元素資料型別 變數 陣列或者collection集合 for int i arr 2 集合 arraylistlist new arraylist list.add a list.add b list.add c list.add...

java多執行緒三種方式

有三種 1 繼承thread類,重寫run函式 建立 class xx extends thread 開啟執行緒 物件.start 啟動執行緒,run函式執行 2 實現runnable介面,重寫run函式 開啟執行緒 thread t new thread 物件 建立執行緒物件 t.start 3 ...