簡體   English   中英

如何告訴一個類使用另一個類的方法?

[英]How can I tell a class to use methods of another class?

我會盡量保持簡潔。 我想編寫一個名為 smartADT 的 ADT,它根據列表中的條目數選擇要使用的數據結構。 例如,如果給我一個包含 50,000 名員工的列表,我將告訴 smartADT 使用 sortedLinkedList,如果超過此數量,我將使用 BST 等,但在本示例中,我傳遞的大小為 50000。我的問題是如何告訴我的 smartADT 使用來自linkedList 類(已經實現)的添加、刪除、查找方法?

這是我到目前為止:

    public class SmartADT{
        int size;
        
        SmartADT(int size){
            this.size = size;
            SetSmartADT(size);
        }

        public void SetSmartADT(int size){
            //size is 50000, tell smartADT to use linked list
        }

        public void add(SmartADT temp, int data){
             //add in linked list
        }

        public void remove(SmartADT temp, int data){
             //delete in linked list
        }

        public static void main(String [] args) {
            SmartADT sadt = new SmartADT(50000); 
    }
}

運行后,如何將linkedList 作為SmartADT 傳遞並使用鏈表方法進行我需要的操作? 提前感謝您的任何反饋。

找到一組共享相同接口的具體數據結構實現(例如, SetCollectionList接口)。 之后,聲明(在您的類SmartADT )將保存員工集合的字段(讓我們命名為員工),並使其成為公共接口的類型(讓我們以List為例):

private final List <Employees> employees; 

SmartADT構造函數中,根據您的大小限制,將List接口的具體實現分配給現場員工

SmartADT(int size){
    this.size = size;
    SetSmartADT(size);
    if(size > ....) employees = new ArrayList<>();
    else if(size > ... && ... < size) employees = new LinkedList<>();
    .... 
}

自然,您需要檢查要使用的每個集合(例如, ArrayListLinkedList )的實現細節,並驗證它們是否符合您的需要。

根據您的代碼,要選擇的通用接口(至少)需要實現addremove方法,這是我提到的所有接口的情況。 您需要做的最后一步是將對方法addremove方法(來自SmartADT類)的調用轉發到分配給字段員工的具體實現中的調用:

public void add(...){
     .... 
    employees.add(...);
}

public void remove(...){
     ...
     employees.remove(...);
}

您可以通過將將集合分配給員工的問題轉移到一個單獨的類並應用工廠模式來改進我發布的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM