Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Đây là bài viết được dịch bởi AI.

제이온

[Effective Java] Mục 5: Sử dụng tiêm phụ thuộc thay vì khai báo tài nguyên

  • Ngôn ngữ viết: Tiếng Hàn Quốc
  • Quốc gia cơ sở: Tất cả các quốc gia country-flag

Chọn ngôn ngữ

  • Tiếng Việt
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Văn bản được tóm tắt bởi AI durumis

  • Nếu lớp phụ thuộc vào một hoặc nhiều tài nguyên bên trong, nên tránh sử dụng lớp tiện ích tĩnh và lớp singleton, thay vào đó nên sử dụng tiêm phụ thuộc.
  • Sử dụng tiêm phụ thuộc có thể cải thiện tính linh hoạt, khả năng tái sử dụng và khả năng kiểm tra của lớp, và tài nguyên có thể được tiêm từ hàm tạo, nhà máy tĩnh, nhà tạo dựng, v.v.
  • Tiêm phụ thuộc có thể được sử dụng bằng cách chuyển chính tài nguyên hoặc nhà máy tài nguyên, và trong các dự án có nhiều phụ thuộc, việc sử dụng khung tiêm phụ thuộc là hiệu quả hơn.

Nếu một lớp phụ thuộc vào một hoặc nhiều tài nguyên bên trong và các tài nguyên đó ảnh hưởng đến hành vi của lớp, thì tốt nhất là không sử dụng lớp tiện ích tĩnh hoặc lớp Singleton.


Lớp không nên tự tạo các tài nguyên này, thay vào đó, tốt nhất là chuyển các tài nguyên cần thiết cho lớp tạo trong constructor. Chèn phụ thuộc giúp cải thiện sự linh hoạt, khả năng tái sử dụng và khả năng kiểm tra của lớp.


Ví dụ

Ví dụ về cách sử dụng lớp tiện ích tĩnh

public class SpellChecker {

    private static final Lexicon dictionary = new Lexicon();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // Logic sử dụng từ điển
    }

    public static List suggestions(String typo) {
        // Logic sử dụng từ điển
    }

Lớp tiện ích này giả sử chỉ sử dụng một từ điển. Tuy nhiên, trong thực tế, có thể có nhiều từ điển cho mỗi ngôn ngữ và thậm chí các từ điển riêng biệt cho thuật ngữ chuyên ngành.


Ví dụ về cách sử dụng lớp Singleton

public class SpellChecker {

    private final Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static boolean isValid(String word) {
        // Logic sử dụng từ điển
    }

    public static List suggestions(String typo) {
        // Logic sử dụng từ điển
    }


Lớp Singleton cũng giả sử chỉ sử dụng một từ điển, vì vậy nó gặp phải cùng một nhược điểm như trên.


Giải pháp 1 - Loại bỏ từ khóa final trong trường

public class SpellChecker {

    private Lexicon dictionary = new Lexicon();

    public static SpellChecker INSTANCE = new SpellChecker();

    private SpellChecker() {
    }

    public static void changeDictionary(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // Logic sử dụng từ điển
    }

    public static List suggestions(String typo) {
        // Logic sử dụng từ điển
    }


Bạn có thể loại bỏ từ khóa final khỏi từ điển trong lớp tiện ích tĩnh hoặc lớp Singleton và thiết kế nó để cho phép thay thế từ điển bằng từ điển khác từ bên ngoài. Tuy nhiên, phương pháp này khó sử dụng và có thể dẫn đến vấn đề đồng bộ trong môi trường đa luồng.


Giải pháp 2 - Sử dụng tiêm phụ thuộc

public class SpellChecker {

    private final Lexicon dictionary;

    public SpellChecker(Lexicon dictionary) {
        this.dictionary = dictionary;
    }

    public static boolean isValid(String word) {
        // Logic sử dụng từ điển
    }

    public static List suggestions(String typo) {
        // Logic sử dụng từ điển
    }


Thông qua ví dụ trên, bạn có thể nhận thấy rằng lớp tĩnh và lớp Singleton không nên phụ thuộc vào tài nguyên bên trong. Điều này có nghĩa là tài nguyên bên trong tốt hơn là nên được tiêm từ bên ngoài.


Lớp sử dụng tiêm phụ thuộc đảm bảo bất biến nhờ từ khóa final và có lợi thế là hỗ trợ nhiều instance tài nguyên. Ngoài ra, tiêm phụ thuộc có thể được áp dụng cho cả constructor, factory tĩnh và builder.


Tiêm phụ thuộc không chỉ đơn giản là chuyển chính tài nguyên, mà còn thường được sử dụng để chuyển factory tài nguyên. Factory là một đối tượng tạo ra instance của một kiểu cụ thể mỗi khi được gọi. Phương pháp này được gọi là mẫu phương thức Factory và Supplier trong Java 8 là ví dụ hoàn hảo thể hiện factory.


public static List create(Supplier generator) {
    ...


Thông thường, kiểu wildcards giới hạn được sử dụng để giới hạn tham số kiểu của factory. Khi sử dụng phương pháp này, client có thể chuyển bất kỳ factory nào là kiểu con của kiểu được chỉ định.


Tiêm phụ thuộc cải thiện tính linh hoạt và khả năng kiểm tra, nhưng có thể khá tốn kém cho các dự án có rất nhiều phụ thuộc. Trong những trường hợp này, bạn có thể sử dụng khung tiêm phụ thuộc (Dagger, Guice, Spring, v.v.) để giảm chi phí.


Nguồn

제이온
제이온
제이온
제이온
[Hiệu quả Java] Mục 3. Đảm bảo Singleton bằng cách sử dụng private constructor hoặc enum Bài viết giới thiệu ba phương pháp thực hiện Singleton trong Java (thành viên public static, phương thức nhà máy tĩnh, loại enum) và giải thích ưu điểm, nhược điểm của mỗi phương pháp cũng như lưu ý khi serialize. Bài viết đưa ra phương pháp sử dụng enum

27 tháng 4, 2024

[Effective Java] Mục 4. Sử dụng constructor private để ngăn chặn việc khởi tạo instance Đối với các lớp tiện ích chỉ chứa các phương thức và trường tĩnh, nên đặt quyền truy cập của constructor thành private để ngăn chặn việc khởi tạo instance. Điều này giúp ngăn chặn người dùng nhầm tưởng rằng constructor được tạo tự động và làm cho việc kế

28 tháng 4, 2024

[Hiệu quả Java] Mục 6. Tránh tạo đối tượng không cần thiết Hướng dẫn về cách giảm thiểu việc tạo đối tượng không cần thiết trong Java. Đối với các đối tượng bất biến như String, Boolean, nên sử dụng literal, và đối với biểu thức chính quy, tốt nhất nên cache instance Pattern. Ngoài ra, việc auto-boxing có thể dẫn

28 tháng 4, 2024

[Concurrency] Atomic Operation: Memory Fence và Memory Ordering Bài đăng trên blog này giải thích cách xem xét thứ tự bộ nhớ trong các hoạt động nguyên tử và tầm quan trọng của tùy chọn Ordering. Bài viết sẽ cung cấp thông tin chi tiết về các tùy chọn Ordering khác nhau như Relaxed, Acquire, Release, AcqRel, SecCst, c
곽경직
곽경직
곽경직
곽경직
곽경직

12 tháng 4, 2024

[Không chuyên ngành, sống sót với tư cách là nhà phát triển] 16. Mẹo để tạo danh mục đầu tư cho nhà phát triển mới Nhà phát triển mới (đặc biệt là những người không chuyên ngành) khi tạo danh mục đầu tư cần phải giải thích rõ ràng về kỹ thuật cũng như dịch vụ hoặc chức năng đã phát triển. Ví dụ, dự án "Cộng đồng cho sinh viên tìm việc" thì cần bao gồm các nội dung côn
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 tháng 4, 2024

Mô hình hóa dữ liệu vật lý Mô hình hóa dữ liệu vật lý là quá trình thiết kế các bảng trong cơ sở dữ liệu quan hệ để có thể sử dụng thực tế, nhằm mục tiêu tối ưu hóa hiệu suất thông qua việc tối ưu hóa dung lượng lưu trữ, phân vùng dữ liệu, thiết kế chỉ mục. Việc phân tích truy vấn
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 tháng 4, 2024

3 vấn đề quan trọng hơn phong cách trong việc lựa chọn cổ phiếu: 1) Cổ phiếu của doanh nghiệp tốt, 2) Cổ phiếu tốt, 3) Mua với giá tốt Cổ phiếu tăng trưởng so với cổ phiếu giá trị không quan trọng. Bí quyết đầu tư thực sự là mua cổ phiếu tốt của doanh nghiệp tốt với giá tốt. Doanh nghiệp phát triển, ban lãnh đạo đáng tin cậy và định giá hợp lý là chìa khóa. Nhà đầu tư cá nhân cũng cần li
고집스런가치투자
고집스런가치투자
고집스런가치투자
고집스런가치투자

3 tháng 4, 2024

[Kỹ thuật viên kim loại] Giải pháp 33 Cung cấp thông tin đa dạng về vật liệu kim loại, bao gồm cấu trúc tinh thể của vật liệu kim loại, quá trình hình thành hạt pearlite, phương pháp đo kích thước hạt ferrite, 5 nguyên tố chính trong thép và ảnh hưởng của mangan, biện pháp phòng ngừa giòn hóa
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23 tháng 4, 2024

[Kỹ năng kim loại 35] Giải pháp Tài liệu này tổng hợp và giải thích các thuật ngữ và khái niệm liên quan đến kim loại, bao gồm: kiểm tra cấu trúc vi mô của kim loại, xác định kích thước hạt ferit, tỷ lệ đóng gói của BCC, v.v. Tài liệu trình bày các ví dụ ứng dụng thực tế như điều kiện c
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi
blog.naver.com/gksmftordldi

23 tháng 4, 2024