CodeGym/Khóa học Java/Mô-đun 3/Các mẫu sáng tạo

Các mẫu sáng tạo

Có sẵn

3.1 Độc thân

Singleton là một mẫu thiết kế chung đảm bảo rằng một ứng dụng đơn luồng sẽ có một phiên bản duy nhất của một số lớp và cung cấp một điểm truy cập toàn cầu cho phiên bản này.

Độc thân

Thông thường, các lập trình viên mới làm quen thích tập hợp các phương thức tiện ích vào một lớp tĩnh nào đó - một lớp chỉ chứa các phương thức tĩnh. Cách tiếp cận này có một số nhược điểm - ví dụ: bạn không thể chuyển tham chiếu đến một đối tượng của lớp như vậy, các phương thức như vậy rất khó kiểm tra và tương tự.

Thay vào đó, một giải pháp lớp đơn đã được đề xuất: một lớp chỉ có thể có một đối tượng. Khi cố gắng tạo đối tượng này, nó chỉ được tạo nếu nó chưa tồn tại, nếu không, một tham chiếu đến một thể hiện đã tồn tại sẽ được trả về.

Điều cần thiết là có thể sử dụng một thể hiện của lớp, vì trong nhiều trường hợp, chức năng rộng hơn sẽ khả dụng. Ví dụ, lớp này có thể triển khai một số giao diện và đối tượng của nó có thể được chuyển sang các phương thức khác dưới dạng triển khai giao diện. Điều gì không thể được thực hiện với một tập hợp các phương thức tĩnh.

Ưu điểm:

  • Các phương thức được liên kết với một đối tượng, không phải là một lớp tĩnh - bạn có thể truyền một đối tượng bằng cách tham chiếu.
  • Các phương thức đối tượng dễ kiểm tra và mô phỏng hơn nhiều.
  • Một đối tượng chỉ được tạo khi cần thiết: khởi tạo đối tượng lười biếng.
  • Đẩy nhanh thời gian ra mắt ban đầu của chương trình nếu có nhiều đĩa đơn không cần thiết để ra mắt.
  • Một mình có thể được tiếp tục biến thành một chiến lược mẫu hoặc một số đối tượng như vậy.

Điểm trừ:

  • Việc kiểm soát các cuộc đua giữa các luồng và sự chậm trễ trở nên khó khăn hơn.
  • Rất khó để viết một “đơn độc” “từ đầu” đa luồng: lý tưởng nhất là truy cập vào một đơn lẻ lâu đời không nên mở một mutex. Các giải pháp đã được chứng minh tốt hơn.
  • Xung đột giữa hai luồng đối với một luồng chưa hoàn thành sẽ dẫn đến độ trễ.
  • Nếu đối tượng được tạo trong một thời gian dài, độ trễ có thể gây trở ngại cho người dùng hoặc làm gián đoạn thời gian thực. Trong trường hợp này, tốt hơn là chuyển quá trình tạo của nó sang giai đoạn khởi tạo chương trình.
  • Cần có các tính năng đặc biệt để kiểm tra đơn vị - ví dụ: đặt thư viện ở chế độ “không đơn độc” và cách ly hoàn toàn các kiểm tra với nhau.
  • Cần có một chiến thuật đặc biệt để kiểm tra chương trình đã hoàn thành, bởi vì ngay cả khái niệm “khả năng khởi chạy đơn giản nhất” cũng biến mất, vì khả năng khởi chạy phụ thuộc vào cấu hình.

3.2 Nhà máy [Phương pháp]

Phương thức xuất xưởng là một mẫu thiết kế chung cung cấp các lớp con (lớp kế thừa) với một giao diện để tạo các thể hiện của một lớp nhất định. Tại thời điểm tạo, con cháu có thể xác định lớp nào sẽ tạo.

Nói cách khác, khuôn mẫu này ủy thác việc tạo các đối tượng cho các lớp con của lớp cha. Điều này cho phép bạn sử dụng không phải các lớp cụ thể trong mã chương trình mà để thao tác với các đối tượng trừu tượng ở mức cao hơn.

Phương pháp xuất xưởng

Mẫu này xác định một giao diện để tạo một đối tượng, nhưng để nó cho các lớp con quyết định lớp nào sẽ làm cơ sở cho đối tượng. Một phương thức xuất xưởng cho phép một lớp ủy quyền việc tạo các lớp con. Được sử dụng khi:

  • lớp không biết trước nó cần tạo các đối tượng nào của các lớp con nào.
  • một lớp được thiết kế sao cho các đối tượng mà nó tạo ra được chỉ định bởi các lớp con.
  • lớp ủy thác trách nhiệm của nó cho một trong số các lớp con của trình trợ giúp và nó được lên kế hoạch để xác định lớp nào đảm nhận các trách nhiệm này.

3.3 Nhà máy trừu tượng

Một nhà máy trừu tượng là một mẫu thiết kế chung cung cấp giao diện để tạo các họ đối tượng có liên quan hoặc phụ thuộc lẫn nhau mà không chỉ định các lớp cụ thể của chúng.

Mẫu được triển khai bằng cách tạo một lớp trừu tượng Factory, là giao diện để tạo các thành phần hệ thống (ví dụ: đối với giao diện cửa sổ, nó có thể tạo các cửa sổ và nút). Sau đó, các lớp được viết để triển khai giao diện này.

nhà máy trừu tượng

Nó được sử dụng trong trường hợp chương trình phải độc lập với tiến trình và các loại đối tượng mới được tạo. Khi cần tạo các họ hoặc nhóm các đối tượng có liên quan, loại trừ khả năng sử dụng đồng thời các đối tượng từ các tập hợp khác nhau trong cùng một ngữ cảnh.

Điểm mạnh:

  • cô lập các lớp cụ thể;
  • đơn giản hóa việc thay thế các dòng sản phẩm;
  • đảm bảo tính tương thích của sản phẩm.

Giả sử chương trình của bạn hoạt động với hệ thống tệp. Sau đó, để làm việc trong Linux, bạn cần các đối tượng LinuxFile, LinuxDirectory, LinuxFileSystem. Và để làm việc trong Windwos, bạn cần có các lớp WindowsFile, WindowsDirectory, WindowsFileSystem.

Lớp Path, được tạo thông qua Path.of(), chỉ là một trường hợp như vậy. Đường dẫn không thực sự là một lớp, mà là một giao diện và nó có các triển khai WindowsPath và LinuxPath. Và loại đối tượng nào sẽ được tạo sẽ bị ẩn khỏi mã của bạn và sẽ được quyết định trong thời gian chạy.

3.4 Nguyên mẫu

Nguyên mẫu là một mẫu thiết kế chung.

Mẫu này xác định các loại đối tượng được tạo bằng cách sử dụng phiên bản nguyên mẫu và tạo các đối tượng mới bằng cách sao chép nguyên mẫu này. Nó cho phép bạn thoát khỏi việc triển khai và tuân theo nguyên tắc “lập trình thông qua các giao diện”.

Lớp giao diện/lớp trừu tượng ở trên cùng của hệ thống phân cấp được chỉ định làm kiểu trả về và các lớp con cháu có thể thay thế một lớp thừa kế triển khai kiểu này ở đó. Nói một cách đơn giản, đây là mô hình tạo một đối tượng bằng cách sao chép một đối tượng khác thay vì tạo nó thông qua một hàm tạo.

Nguyên mẫu

Mẫu được sử dụng để:

  • tránh thêm nỗ lực tạo đối tượng theo cách tiêu chuẩn (có nghĩa là sử dụng hàm tạo, vì trong trường hợp này, hàm tạo của toàn bộ hệ thống phân cấp tổ tiên của đối tượng cũng sẽ được gọi), khi điều này cực kỳ tốn kém cho ứng dụng.
  • tránh kế thừa trình tạo đối tượng trong ứng dụng khách, giống như mẫu trừu tượng của nhà máy.

Sử dụng mẫu thiết kế này khi chương trình của bạn không quan tâm đến cách tạo, soạn thảo và trình bày sản phẩm:

  • các lớp khởi tạo được xác định trong thời gian chạy, ví dụ, sử dụng tải động;
  • bạn muốn tránh xây dựng hệ thống phân cấp lớp hoặc nhà máy song song với hệ thống phân cấp lớp sản phẩm;
  • các thể hiện của lớp có thể ở một trong một số trạng thái khác nhau. Có thể thuận tiện hơn khi đặt số lượng nguyên mẫu thích hợp và sao chép chúng, thay vì mỗi lần khởi tạo thủ công lớp ở trạng thái thích hợp.
1
Nhiệm vụ
Mô-đun 3,  mức độbài học
Đã khóa
Turnkey Universe
task4106
1
Nhiệm vụ
Mô-đun 3,  mức độbài học
Đã khóa
Personnel Forge
task4107
1
Nhiệm vụ
Mô-đun 3,  mức độbài học
Đã khóa
Personnel Factories
task4108
1
Nhiệm vụ
Mô-đun 3,  mức độbài học
Đã khóa
Prototypes
task4109
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào