在實際開發中,我們往往需要對某些方法進行增強,常用的方法增強的方式有三種,下面就簡單介紹一下三種方式的使用以及特點
需求:有乙個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 ...