2015-11-27 18 views
9

Đọc về giao diện Supplier mới Tôi không thể thấy bất kỳ lợi thế nào về việc sử dụng nó. Chúng ta có thể thấy dưới đây là một ví dụ về nó.Ưu điểm của việc sử dụng Nhà cung cấp trong Java là gì?

class Vehicle{ 
    public void drive(){ 
    System.out.println("Driving vehicle ..."); 
    } 
} 
class Car extends Vehicle{ 
    @Override 
    public void drive(){ 
    System.out.println("Driving car..."); 
    } 
} 
public class SupplierDemo { 
    static void driveVehicle(Supplier<? extends Vehicle> supplier){ 
    Vehicle vehicle = supplier.get(); 
    vehicle.drive(); 
    } 
} 
public static void main(String[] args) { 
    //Using Lambda expression 
    driveVehicle(()-> new Vehicle()); 
    driveVehicle(()-> new Car()); 
} 

Như chúng ta có thể thấy trong ví dụ rằng, phương pháp driveVehicle hy vọng một Supplier như là đối số. Tại sao chúng ta không thay đổi nó để mong đợi một Vehicle?

public class SupplierDemo { 
    static void driveVehicle(Vehicle vehicle){ 
    vehicle.drive(); 
    } 
} 
public static void main(String[] args) { 
    //Using Lambda expression 
    driveVehicle(new Vehicle()); 
    driveVehicle(new Car()); 
} 

Lợi thế của việc sử dụng Supplier là gì?

EDIT: Câu trả lời cho câu hỏi Java 8 Supplier & Consumer explanation for the layperson không giải thích được lợi ích của việc sử dụng Supplier. Có một bình luận hỏi về nó, nhưng nó không được trả lời.

Lợi ích của việc này thay vì gọi phương thức trực tiếp là gì? Có phải vì Nhà cung cấp có thể hoạt động như một người trung gian và giao giá trị "trả lại" đó?

+1

FWIW: 'driveVehicle (Vehicle: : mới) ' – zeroflagL

+0

Ai đó có thể nhận xét về phần cuối của câu hỏi - 'Lợi ích của việc này thay vì gọi phương thức trực tiếp là gì?'? – pMan

+0

@pMan Nhà cung cấp là hữu ích vì nó sẽ được gọi chỉ khi nào và nếu cần thiết. Ví dụ, nếu (điều kiện) {doStuff (supplier.get()); } – hbelmiro

Trả lời

9

Trong ví dụ trên, tôi không sử dụng nhà cung cấp. Bạn đang dùng Vehicle để lái xe, không yêu cầu xe cộ.

Tuy nhiên để trả lời câu hỏi chung của bạn:

  • Bởi vì xây dựng một chiếc xe hơi là tốn kém và chúng tôi không muốn làm điều đó cho đến khi chúng tôi thực sự thực sự cần.
  • Vì chúng tôi muốn X xe hơi không chỉ là một.
  • Vì thời gian thi công ô tô là quan trọng.
  • Vì việc xây dựng phức tạp nên chúng tôi muốn kết thúc.
  • Bởi vì chúng ta không biết được xe trở lại cho đến khi chúng tôi trả lại (có thể nó sẽ được một hình mới, có thể là một tái chế một, có thể là một wrapper, ai mà biết được)
+0

điều này không có ý nghĩa gì trong ngữ cảnh này. –

+1

@mlk Tôi đã hỏi một cách tổng quát. Câu trả lời của bạn là hợp lệ. Cảm ơn bạn. – hbelmiro

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