Bài viết này dành cho bất kỳ ai lần đầu tiên bắt gặp khái niệm về mẫu thiết kế, đã nghe thấy thuật ngữ singleton hoặc bằng cách nào đó đã triển khai mẫu đơn nhưng không hiểu chuyện gì đang xảy ra. Chào mừng! Các sinh viên CodeGym bắt gặp các mẫu thiết kế lần đầu tiên ở Cấp độ 15, khi đội trưởng bất ngờ yêu cầu họ "củng cố" hiểu biết của mình bằng cách triển khai mẫu Java Singleton với việc triển khai lười biếng. Sinh viên lần đầu tiên nghe về mẫu đơn lập tức có rất nhiều câu hỏi: mẫu thiết kế là gì trên thế giới? Tại sao chúng ta cần nó? Độc thân là gì ? Và cuối cùng, triển khai lười biếng là gì? Hãy trả lời những câu hỏi này theo thứ tự.
Và mô hình singleton chỉ là một trong số đó.
với blackjack và sốvà dành nhiều thời gian để làm như vậy, hoặc bạn có thể thực hiện một điều đã được hiểu và mô tả trong một thời gian dài. Điều này cũng đúng với các mẫu thiết kế. Ngoài ra, với các mẫu thiết kế, mã trở nên tiêu chuẩn hơn và khi sử dụng mẫu phù hợp, bạn sẽ ít mắc lỗi hơn vì các cạm bẫy phổ biến của mẫu đã được xác định và loại bỏ từ lâu. Trên hết, kiến thức về các mẫu giúp các lập trình viên hiểu nhau hơn. Bạn có thể chỉ cần nói tên của một mẫu thay vì cố gắng giải thích dài dòng cho các lập trình viên đồng nghiệp của mình. Tóm lại, các mẫu thiết kế giúp bạn:
Để kết thúc phần này, chúng tôi lưu ý rằng toàn bộ các mẫu thiết kế có thể được chia thành ba nhóm lớn:
Những gì trên thế giới là một mẫu thiết kế?
Tôi tin rằng một chút lịch sử là để trả lời câu hỏi này với sự hiểu biết tốt nhất. Có bốn tác giả lập trình nổi tiếng (Erich Gamma, John Vlissides, Ralph Johnson và Richard Helm) đã đưa ra một ý tưởng thú vị. Họ nhận thấy rằng việc phát triển phần mềm thường yêu cầu họ giải quyết các vấn đề gần giống nhau và viết mã có cấu trúc theo cùng một cách. Vì vậy, họ quyết định mô tả các mẫu điển hình thường cần được sử dụng trong lập trình hướng đối tượng. Cuốn sách của họ được xuất bản năm 1994 với tựa đề Design Patterns: Elements of Reusable Object-Oriented Software. Tên của cuốn sách hóa ra quá dài và mọi người bắt đầu gọi nó đơn giản là cuốn sách của Gang of Four. Phiên bản đầu tiên bao gồm 23 mẫu. Sau đó, hàng chục mẫu khác đã được phát hiện.Một mẫu thiết kế là một giải pháp tiêu chuẩn hóa cho một vấn đề chung. |
Tại sao chúng ta cần các mẫu thiết kế?
Bạn có thể lập trình mà không cần biết các mẫu: xét cho cùng, ở Cấp độ 15, bạn đã viết hàng trăm chương trình nhỏ trên CodeGym mà không hề biết rằng chúng tồn tại. Điều này gợi ý rằng các mẫu thiết kế là một loại công cụ mà cách sử dụng của nó phân biệt giữa bậc thầy với người nghiệp dư: Các mẫu thiết kế mô tả cách giải quyết đúng đắn một vấn đề điển hình. Điều này có nghĩa là biết các mẫu giúp bạn tiết kiệm thời gian. Theo cách đó, chúng tương tự như các thuật toán. Ví dụ: bạn có thể tạo thuật toán sắp xếp của riêng mình
|

Cuối cùng, mẫu singleton
Singleton là một mô hình sáng tạo . Mẫu này đảm bảo rằng chỉ có một thể hiện của một lớp và cung cấp một điểm truy cập toàn cục cho đối tượng này. Từ mô tả, rõ ràng là mẫu này nên được áp dụng trong hai trường hợp:- khi chương trình của bạn yêu cầu không tạo nhiều hơn một đối tượng của một lớp cụ thể. Ví dụ: trò chơi trên máy tính có thể có lớp Anh hùng và chỉ một đối tượng Anh hùng mô tả anh hùng duy nhất trong trò chơi.
- khi bạn cần cung cấp một điểm để truy cập toàn cục vào một đối tượng. Nói cách khác, bạn cần làm cho đối tượng có sẵn từ bất kỳ đâu trong chương trình. Than ôi, chỉ tạo một biến toàn cục là không đủ, vì nó không được bảo vệ chống ghi: bất kỳ ai cũng có thể thay đổi giá trị của biến, do đó, điểm truy cập toàn cầu của đối tượng có thể bị mất. Ví dụ, các thuộc tính này của Singleton là cần thiết khi bạn có một đối tượng hoạt động với cơ sở dữ liệu và bạn cần truy cập cơ sở dữ liệu từ các phần khác nhau của chương trình. Một Singleton sẽ đảm bảo rằng không ai viết mã thay thế phiên bản đã tạo trước đó.
-
Tìm một ví dụ về Singleton với khởi tạo lười biếng.
-
Tạo ba lớp đơn lẻ - Mặt trời, Mặt trăng, Trái đất - trong các tệp riêng biệt bằng cách sử dụng cùng một nguyên tắc.
-
Thực hiệnHành tinhgiao diện trong các lớp Sun , Moon và Earth .
- Trong khối tĩnh của lớp Giải pháp , hãy gọireadKeyFromConsoleAndInitPlanetphương pháp.
-
Thực hiện cácreadKeyFromConsoleAndInitPlanetChức năng phương pháp:
-
5.1. Đọc một tham số Chuỗi từ bảng điều khiển
-
5.2. Nếu tham số bằng một trong cácHành tinhhằng số của giao diện, hãy tạo đối tượng thePlanet phù hợp .
-
-
Bạn cần cung cấp cho lớp một trường tĩnh riêng lưu trữ một đối tượng:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; // #1 }
-
Đặt hàm tạo (mặc định) ở chế độ riêng tư. Điều này có nghĩa là nó không thể được truy cập bên ngoài lớp và sẽ không thể trả về các đối tượng mới:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton(){} // #2 }
-
Khai báo một phương thức tạo tĩnh sẽ được sử dụng để lấy singleton:
public class LazyInitializedSingleton { private static LazyInitializedSingleton instance; private LazyInitializedSingleton() {} public static LazyInitializedSingleton getInstance() { // #3 if (instance == null) { // If the object has not yet been created instance = new LazyInitializedSingleton(); // Create a new object } return instance; // Return the previously created object } }
GO TO FULL VERSION