[英]Design pattern to reuse the existing interface implementation in java
假設我有一個接口
public interface Action<T> {
void doWork(T t);
//can have multiple methods
}
現在這個 class 由
public class DefaultAction implements Action<String> {
@Override
public void doWork(String s) {
System.out.println(s);
}
}
現在我有一個接受動作的流程
public abstract class Flow<T> {
void execute(T t){
Action<T> action = getAction();
action.doWork(t);
}
abstract Action<T> getAction();
}
所以我有接受雙倍的流量
public class AnotherActionFlow extends Flow<Double> {
@Override
Action<Double> getAction() {
return new AnotherActionSet();
}
}
反過來使用默認操作
public class AnotherActionSet implements Action<Double> {
DefaultAction defaultAction;
@Override
public void doWork(Double aDouble) {
defaultAction.doWork(String.valueOf(aDouble));
}
}
所以在這種情況下,每當操作界面發生變化時,我必須始終更新AnotherActionSet
方法
他們是否有任何解決方法,以便我可以使用通用邏輯將雙精度轉換為字符串,然后使用DefaultAction
任何模式都可以幫助將AnotherActionSet
轉換為DefaultAction
我只指定String.valueOf(aDouble)
以便可以將值傳遞給DefaultAction
而不是為每個方法編寫相同的東西
我想將DefaultAction
中的邏輯重用於其他操作,這些操作是DefaultAction
的包裝器
例如;
public class AnotherActionSet2 implements Action<Long> {
DefaultAction defaultAction;
@Override
public void doWork(Long long) {
defaultAction.doWork(String.valueOf(long));
}
}
public class AnotherActionSet3 implements Action<Integer> {
DefaultAction defaultAction;
@Override
public void doWork(Integer int) {
defaultAction.doWork(String.valueOf(int));
}
}
如您所見,我每次都必須手動編寫映射,而是可以只通過 function 將給定 class 轉換為字符串,然后我可以使用DefaultAction
所以我只定義 Function<Double,String> dToS 並將其插入DefaultAction
並且不需要再次定義該方法
您可以使用 Java 8 lambda 來獲得更容易和更有表現力的東西。
基本上,您的 Action 與 JDK 中的標准 Consumer 相同,只是方法的名稱發生了變化。
然后 defaultAction 看起來像這樣:
Consumer<String> defaultAction = s -> {System.out.println(s);}
所以 AnotherActionSet 可以這樣表達:
Consumer<Double> anotherActionSet = s -> {defaultAction.accept(String.valueOf(aDouble));}
您還會發現流程和操作的作用完全相同(獲取 T 並且不返回任何內容),因此其中一個概念是多余的。 你可以寫:
Consumer<Double> anotherActionFlow = anotherActionSet;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.