2011-12-12 48 views

Trả lời

7

Vì đây là lớp nhà máy. Sử dụng các phương thức tĩnh để trả về một cá thể nhà máy có ý nghĩa khi có một số lượng nhỏ các tình huống mà bạn muốn tạo một đối tượng như vậy. Vì vậy, thay vì quá tải nhà xây dựng đến điểm mà bạn sẽ phải nhớ tất cả các loại kết hợp các đối số kỳ lạ để sử dụng cho từng tình huống nhất định, nó chỉ cung cấp cho bạn một phương thức (hy vọng được đặt tên) cho mỗi tình huống.

Trong trường hợp này, bạn có thể tạo một đối tượng với một trong số:

  • getLocalHost(), nhận được địa chỉ của riêng bạn;
  • getByName(), nhận địa chỉ "chính" cho trang web; hoặc
  • getAllByName(), nhận danh sách địa chỉ.

Đây không phải là một danh sách đầy đủ, xem here để biết thêm trong số họ, tìm kiếm trang đó cho:

Methods in java.net that return InetAddress
7

Bởi vì chúng không có nghĩa là được khởi tạo trực tiếp (và thực tế đây là một mẫu hữu ích cần biết). Thay vào đó, bạn có nghĩa là sử dụng các phương thức "nhà máy" khác nhau được API cung cấp để có được một cá thể. Kiểm tra tài liệu:

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html

Đặc biệt, chú ý đến các getBy...() phương pháp tĩnh.

+0

Hoặc lấy từ '' 'ví dụ java.net.Socket''': [getInetAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getInetAddress()) và [getLocalAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getLocalAddress()). – edwardw

+0

@edwardw - Có, nếu bạn có/có ý định có kết nối hoạt động với địa chỉ từ xa. Nhưng điều đó không phải lúc nào cũng đúng. – aroth

1

Inet4AddressInet6Address có nhà thầu mặc định mà chỉ gói có thể nhìn thấy, và do đó có thể thấy InetAddress nó.

Lý do tại sao InetAddress không có một constructor là vì InetAddress là một Flyweight pattern đó cho thấy Factory methods để lấy liên quan InetAddress subclassed dựa trên địa chỉ được cung cấp.

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