Khi nào sử dụng mẫu thiết kế nào? [đóng cửa]


104

Tôi rất thích các mẫu thiết kế, nhưng tôi thấy rất khó để xem khi nào tôi có thể áp dụng một mẫu. Tôi đã đọc rất nhiều trang web nơi giải thích các mẫu thiết kế. Tôi hiểu hầu hết chúng, nhưng tôi cảm thấy rất khó để nhận ra một khuôn mẫu trong các tình huống của riêng mình.

Vì vậy, đó là lý do tại sao tôi hỏi câu hỏi này. Có bất kỳ hướng dẫn / chuông cảnh báo nào khi sử dụng mẫu thiết kế nào không.

Ví dụ: nếu bạn đang thực hiện một câu lệnh switch để xác định đối tượng nào bạn cần tạo, bạn có thể muốn sử dụng mẫu thiết kế nhà máy. Vì vậy, câu lệnh switch trong trường hợp này là một 'hồi chuông cảnh báo' để sử dụng Factory pattern.

Vì vậy, bạn có biết thêm 'chuông báo động' để xác định một mẫu thiết kế?


6
Thông thường, các mô tả mẫu mà tôi thấy bao gồm mô tả các tình huống mà bạn muốn mẫu thiết kế đó.
R. Martinho Fernandes

Câu trả lời:


99

Thông thường quá trình diễn ra theo cách khác. Đừng đi tìm các tình huống sử dụng các mẫu thiết kế, hãy tìm mã có thể được tối ưu hóa. Khi bạn có mã mà bạn cho rằng không được cấu trúc đúng. cố gắng tìm một mẫu thiết kế sẽ giải quyết được vấn đề.

Các mẫu thiết kế nhằm giúp bạn giải quyết các vấn đề về cấu trúc, đừng đi thiết kế ứng dụng của bạn chỉ để có thể sử dụng các mẫu thiết kế.


23
Không chỉ các vấn đề về cấu trúc, mà cả các vấn đề về hành vi và sáng tạo.
DevDemon

1
Các mẫu thiết kế có thể đẩy nhanh quá trình phát triển bằng cách cung cấp các mô hình phát triển đã được kiểm nghiệm, chứng minh. Thiết kế phần mềm hiệu quả đòi hỏi phải xem xét các vấn đề có thể không được nhìn thấy cho đến sau khi triển khai. Việc sử dụng lại các mẫu thiết kế giúp ngăn chặn các vấn đề tế nhị có thể gây ra các vấn đề lớn và cải thiện khả năng đọc mã cho các lập trình viên và kiến ​​trúc sư quen thuộc với các mẫu.
SaddamBinSyed

5

Tìm hiểu chúng và dần dần bạn sẽ có thể nhận ra và tìm ra thời điểm sử dụng chúng. Bắt đầu với một cái gì đó đơn giản như mô hình singleton :)

nếu bạn muốn tạo một thể hiện của một đối tượng và chỉ MỘT. Bạn sử dụng mô hình singleton. Giả sử bạn đang tạo một chương trình với một đối tượng tùy chọn. Bạn không muốn một vài trong số đó, điều đó thật ngớ ngẩn. Singleton đảm bảo rằng sẽ không bao giờ có nhiều hơn một. Singleton pattern đơn giản, được sử dụng nhiều và thực sự hiệu quả.


17
Singleton không thực sự dành cho khi bạn chỉ cần một phiên bản. Singleton dành cho khi bạn cần giới hạn trong một phiên bản. Khi bạn chỉ cần một phiên bản, bạn có thể thử chỉ cần tạo một phiên bản và sử dụng nó.
R. Martinho Fernandes

Ngoài ra, trong khi singleton rất hữu ích và cần thiết ở một số nơi, nó cũng là một mẫu rất dễ thực hiện khi không cần thiết. Như bạn gợi ý ở đây, và như Fernandes đã chỉ ra, bạn có thể không cần nó. Trên thực tế, việc sử dụng mẫu singleton là một dấu hiệu tốt cho thấy có thể có mùi mã. Sử dụng nó cho một lớp dịch vụ nhiều khả năng là một mùi mã. Có vẻ như bạn cần DI, không phải singleton. Một số người sử dụng chúng theo cách đó. Đặc biệt là đối với mã nhỏ (không quan trọng), hoặc POC. Nhưng như tôi đã nói, có một số cách sử dụng hiệu quả. Đừng tìm một cách dễ dàng để làm điều gì đó và chỉ làm điều đó.
Suamere

4

Tôi hoàn toàn đồng ý với @Peter Rasmussen.

Các mẫu thiết kế cung cấp giải pháp chung cho vấn đề thiết kế thường xảy ra.

Tôi muốn bạn làm theo cách tiếp cận dưới đây.

  1. Hiểu ý định của từng mẫu
  2. Hiểu danh sách kiểm tra hoặc trường hợp sử dụng của từng mẫu
  3. Nghĩ ra giải pháp cho vấn đề của bạn và kiểm tra xem giải pháp của bạn có nằm trong danh sách kiểm tra của mẫu cụ thể không
  4. Nếu không, chỉ cần bỏ qua các mẫu thiết kế và viết giải pháp của riêng bạn.

Liên kết hữu ích:

sourcemaking : Giải thích ý định , cấu trúcdanh sách kiểm tra đẹp mắt bằng nhiều ngôn ngữ bao gồm C ++ và Java

wikipedia : Giải thích cấu trúc, sơ đồ UML và các ví dụ làm việc bằng nhiều ngôn ngữ bao gồm C # và Java.

Danh sách kiểm tra Quy tắc ngón tay cái trong mỗi mẫu thiết kế mã nguồn cung cấp chuông alram mà bạn đang tìm kiếm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.