2012-01-25 36 views
6

Có vẻ như sự cần thiết của một loại như sau sẽ rất phổ biến rằng một cái gì đó như nó phải được đưa vào xây dựng vào Java:Có một loại Java tích hợp đảm bảo phương thức thực thi (T t) không?

public interface Executer<T> { 
    void execute(T object); 
} 

Sau đó nó có thể được sử dụng trong các lớp khác như ví dụ tầm thường này mà các cuộc gọi một bó của các nhà điều hành trên một đối tượng.

class Handler<T> implements Executer<T> { 
    List<Executer<T>> executerList; 

    Handler(List<Executer<T>> executer) { 
     this.executerList = executer; 
    } 

    void execute(T t) { 
     for (Executer<T> executer : this.executerList) { 
     executer.execute(t); 
     } 
    } 
} 

Có loại tương đương tích hợp hoặc thư viện chung không? Có một cái tên cho khái niệm này?

+1

Việc triển khai giao diện Executer của bạn nên làm gì, vì chúng phải được gọi trên một kiểu cụ thể T. – wmorrison365

+4

Có phải 'Runnable' gần với những gì bạn đang tìm kiếm không? – aardvarkk

+0

Tôi đồng ý rằng Runnable sẽ là đủ. Tôi không thực sự chắc chắn những gì xây dựng của bạn cho biết thêm. Ngoài ra còn có các lớp Executor đồng thời mà tôi cho là nhưng những công việc này chạy khỏi Runnable và tồn tại để quản lý các lời gọi đồng thời. – wmorrison365

Trả lời

4

Tôi nghĩ tên của khái niệm là strategy pattern. Hiệu quả bạn đang đóng gói một thuật toán, và điều này làm cho nó dễ dàng hơn để trao đổi một chiến lược cho một chiến lược khác hoặc áp dụng một số chiến lược.

Mẫu thiết kế này rất dễ triển khai và phương pháp execute không cần chỉ lấy một đối số duy nhất của một loại cụ thể. Như vậy, tôi nghi ngờ bạn sẽ tìm thấy một kiểu Java tích hợp, nhưng nó là một mẫu thiết kế nổi tiếng.

+0

Có, hoặc có thể là mẫu Lệnh. Điều này sẽ cung cấp sự phân tách mối quan tâm tốt. – wmorrison365

+0

Ồ, tất nhiên đó là mô hình chiến lược. Tôi không biết tại sao tôi không nhận ra nó.Tôi hơi ngạc nhiên khi giao diện cụ thể này không xuất hiện đủ thường xuyên để đảm bảo loại được tích hợp sẵn. –

+0

@glenviewjeff Vâng, tôi nghĩ rằng sau đó bạn sẽ cần một cho Executor , một cho Executor , một cho Executor , v.v. Điều đó có thể đặt cược một chút lạ để bao gồm như là một built-in loại ... đặc biệt là khi xác định giao diện rất dễ làm cho trường hợp sử dụng cụ thể của bạn. –

2

Tôi gần nhất biết là số Function<F,T> của Guava.

Tôi không nghĩ có bất kỳ thứ gì trong thư viện chuẩn thực hiện chính xác những gì bạn đang yêu cầu. Runnable có phần gần nhưng không có đối số.

P.S. Tôi nghĩ rằng "chức năng" hoặc "functor" là tên chính xác cho khái niệm này.

+0

Tôi đồng ý rằng mặc dù kiểu 'Chức năng' của Guava thực sự có thể được thay thế, việc sử dụng của tôi không phù hợp với ý định của 'Chức năng '. –

Các vấn đề liên quan