亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對象轉換器的面向對象設計模式

對象轉換器的面向對象設計模式

幕布斯6054654 2023-03-23 13:47:42
我想知道應該為我的場景設置什么最佳OOP 設計模式。場景:我有兩個班級,ClassA 和 ClassB。我想將 ClassA 轉換為新的 ClassB,但是,ClassA 可能會更改其成員變量和方法。這意味著可能必須更新將 ClassA 轉換為 ClassB 的方式。促進從 ClassA 到新 ClassB 的轉換的最佳 OOP 設計是什么?目標:創建一個設計模式,允許輕松更改將 ClassA 轉換為 ClassB 的方式。例子:A類public class ClassA {    private String actionName;    // With some getters & setters}B類public class ClassB {    private String action; // Note the subtle difference    // With some getters & setters}處理程序public class Handler {    ClassB classB = new ClassB();    // Convert ClassB to ClassA    This.publish(ClassA);}
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

您需要一個了解 ClassA 和 ClassB 的所有成員的類型。將 ClassA 或 ClassB 彼此耦合是一個壞主意,因此您通常會看到第三種類型實現如下接口:


interface Converter<T, R> {

  R convert(T obj);

}

你可以為你的類實現這個接口:


class AtoBConverter implements Converter<ClassA, ClassB> {

  public ClassB convert(ClassA obj) {

    ...

  }

}

這假定 ClassA 具有允許您檢查其狀態的公共方法,而 ClassB 具有允許您修改其狀態的構造函數/設置器。嚴格來說,如果所有三個類都在同一個 java 包中,您可以將這些方法/構造函數聲明為包私有。


查看完整回答
反對 回復 2023-03-23
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

您絕對應該選擇一個單獨的處理程序類來處理此轉換。


作為一個小的優化,您可以在此處理程序類上使用靜態 api,這樣無論何時您希望在兩個對象之間執行轉換,您都不必實例化處理程序類的實例。


例如:


假設您需要將類型 A 的對象轉換為類型 B 的對象。您的轉換器可能看起來像


class AToBConverter {

    

   public static B convert(A objA){

       //business logic to convert objA to objB

       return objB;

   } }

這里的優點是,無論何時需要將 A 類型的對象轉換為 B 類型的對象,您都可以簡單地執行以下操作:


B objB = AToBConverter.convert(objA); //Note how we don't need to create an instance of the converter



查看完整回答
反對 回復 2023-03-23
?
森林海

TA貢獻2011條經驗 獲得超2個贊

對 ClassB 使用帶參數 (ClassA) 的構造函數,反之亦然

ClassA(ClassB object){
...
}


查看完整回答
反對 回復 2023-03-23
  • 3 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號