Trả lời

7

Chiến lược là giải pháp cho các ngôn ngữ không có chức năng hạng nhất. Bạn chuyển vào một đối tượng chiến lược quyết định một số chính sách mà bạn muốn tách biệt với phần còn lại của mã. Hãy suy nghĩ về phân loại trong Java và cách chúng sử dụng Comparators, một Comparator là một đối tượng chiến lược cho phép bạn chỉ định chính sách để phân loại riêng biệt với thuật toán sắp xếp. Điều đó cho phép bạn sử dụng lại mã bằng cách thả các chiến lược khác nhau. Hình minh hoạ

Nhà máy trừu tượng là một đối tượng được sử dụng để tạo các đối tượng khác, với phần trừu tượng là bạn có nhà máy trả về việc triển khai nhà máy, nơi người dùng truy cập thông qua giao diện. Vì vậy, một nhà máy thực hiện có thể được hoán đổi cho người khác mà không có thay đổi đối với người dùng của các nhà máy, bởi vì những người dùng đó chỉ phụ thuộc vào giao diện của các đối tượng.

+1

+1 cho câu đầu tiên – thepirat000

8

INTENT khác với chi tiết cấu trúc và triển khai. Ngay sau khi bạn nắm bắt được ý tưởng cơ bản rằng INTENT có ý nghĩa, thì bạn sẽ đi đúng hướng.

Understand the role of intent in design patterns

Intent for Strategy. Đây là Mẫu hành vi

  1. Xác định nhóm thuật toán, đóng gói từng gói và làm cho chúng có thể thay thế được. Chiến lược cho phép thuật toán thay đổi độc lập với khách hàng sử dụng nó.
  2. Nắm bắt sự trừu tượng trong giao diện, chôn chi tiết triển khai trong các lớp dẫn xuất.

Ý định cho nhà máy trừu tượng. Đây là Mẫu quảng cáo

  1. Cung cấp giao diện để tạo gia đình các đối tượng liên quan hoặc phụ thuộc mà không chỉ định các lớp cụ thể.
  2. Hệ thống phân cấp đóng gói: nhiều "nền tảng" có thể có và xây dựng bộ "sản phẩm".
+0

Ok sau đó, so với những gì được mục đích/có mục tiêu mà mỗi người trong số họ là nhằm mục đích? tôi nhớ lại rằng startegy được kết nối nhiều hơn để chọn đúng thuật toán ... nhưng không thể tìm thấy một cái gì đó để dựa vào – RanZilber

0

Mẫu thiết kế nhà máy hoạt động như một nhà máy và tạo các loại đối tượng khác nhau theo thời gian chạy theo yêu cầu của bạn. Vì vậy, kiểm soát là tại thời gian chạy và bạn có thể quyết định đối tượng bạn yêu cầu tại thời gian chạy. Vì vậy, khớp nối giữa các đối tượng sẽ được giảm.

Mặt khác, mẫu thiết kế Chiến lược cho phép bạn kiểm soát tốt hơn cấu trúc phân cấp bằng cách sử dụng mối quan hệ "có mối quan hệ" với "là". Bởi vì nếu chúng ta muốn sử dụng thừa kế (là a) trong một kịch bản phức tạp hơn thì chúng ta có thể phải ghi đè lên các phương thức được kế thừa qua các thế hệ và tránh sử dụng lại mã.

Giả sử bạn tạo lớp Thú (hoặc giao diện) và bạn đang có phương thức di chuyển trong đó.

Và bạn đang hy vọng tạo lớp chim bằng cách mở rộng nó. Vì vậy, bạn sẽ thêm các tính năng bay theo phương thức move(). Nhưng trường hợp với chim cánh cụt là gì? Họ sẽ có các tính năng đi bộ.

Vì vậy, mỗi khi bạn tạo động vật bằng cách mở rộng lớp Thú, bạn sẽ phải ghi đè lên phương thức move() lặp đi lặp lại. Bạn có thể hiểu rõ ràng phương thức move() dễ bị tổn thương hơn với các thay đổi, vì vậy thực hành tốt nhất là tách riêng phần thay đổi khỏi các mã lõi.

Đơn giản là chúng ta có thể tạo một hệ thống phân cấp riêng để di chuyển() phương pháp. Bạn có thể gán phương thức move() liên quan cho đối tượng thông qua các phương thức setter. Vì vậy, kiểm soát được thông qua để chạy thời gian. Sơ đồ sau minh họa thực tế đó;

enter image description here

Sau đây là 2 bài đăng trên blog của tôi nếu bạn thích bạn có thể tham khảo chúng để biết thêm chi tiết.

  1. Factory Design pattern

  2. Strategy Design pattern

+0

Tốt hơn. Tôi khuyến khích bạn cẩn thận về việc liên kết đến blog của bạn quá thường xuyên, ngay cả với câu trả lời tốt hơn. Cái này đáp ứng yêu cầu 'tiết lộ', nhưng khá là vô nghĩa. Quá nhiều câu trả lời như thế này và bạn có thể * vẫn * bị gắn cờ vì spam. –

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