Nhiều tuyên bố rằng phần lớn nhất của các mẫu thiết kế của GoF chỉ là giải pháp cho sự vắng mặt của các hàm lớp đầu tiên. Bây giờ Java sắp sửa có được các biểu thức lambda, những mẫu nào trong số đó sẽ bị ảnh hưởng bởi chúng? Những cái nào có thể được đơn giản hóa hoặc khái quát một cách đáng kể? Và cái nào về cơ bản vẫn giữ nguyên? Bất kỳ ví dụ thực tế nào đều được chào đón.Mẫu thiết kế GoF nào sẽ bị thay đổi hoặc bị ảnh hưởng bởi việc giới thiệu lambdas trong Java8?
Trả lời
Tôi nghĩ rằng bạn sẽ thấy nhiều thay đổi nhất trong các mẫu hành vi.
Phương thức mẫu - Các phương thức mẫu sẽ ngày càng được sử dụng nhiều, và thay vào đó chúng ta sẽ thấy các đối tượng chuyển các hàm vào AbstractTemplate thay vì phân lớp AbstractTemplate. Tôi viết blog về vấn đề này một thời gian loooong trước đây: http://hamletdarcy.blogspot.ch/2007/11/groovy-closures-end-of-template-method.html
Observer Pattern - Observer trở nên đơn giản bởi vì bạn không còn cần phải giữ một danh sách các nhà quan sát mà có được cập nhật trên các sự kiện mới, nhưng thay vì giữ một danh sách các chức năng mà cần để được gọi lại về các sự kiện mới. Vì vậy, không có giao diện Observer và chỉ các đối tượng chức năng.
Mẫu chiến lược/trạng thái - Tôi nhóm chúng lại với nhau vì chúng có cấu trúc tương đương, chỉ khác nhau về ý định. Việc sử dụng chiến lược trở nên phổ biến hơn nhiều vì nó dễ thực hiện hơn. Bạn không cần một chiến lược cha mẹ và các lớp con chiến lược, bạn chỉ cần các hàm. Vì vậy, thật đơn giản để chỉ chuyển một hàm như một tham số, có hiệu lực là sử dụng mẫu chiến lược.
Nhìn chung, tôi nghĩ rằng bất kỳ mẫu nào yêu cầu giao diện một phương pháp trở nên dễ thực hiện hơn. Điều này sẽ có hai hiệu ứng. 1) Chúng tôi sẽ sử dụng các mẫu chức năng này nhiều hơn và 2) chúng tôi sẽ ngừng đề cập đến chúng như là các mẫu nhưng cũng giống như "truyền một hàm".
Bạn làm những gì bạn muốn, nhưng tôi nghĩ "JavaScript the Good Parts" mang đến một giới thiệu khá hay để tận dụng các chức năng trong một ngôn ngữ. Bạn có thể nhặt nó lên và đọc nó!
nếu một trong những nhà quan sát chấm dứt tồn tại? – Agos
Điều này xảy ra hôm nay trong ứng dụng GWT. Đăng ký một người quan sát cung cấp cho bạn một đối tượng "HandlerRegistration". Sau đó, bạn có thể gọi remove() trên đối tượng này và nó sẽ tự xóa. http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/web/bindery/event/shared/HandlerRegistration.html –
Tôi đã cố gắng tự trả lời câu hỏi này khi tôi phân tích một số mẫu GoF và đối tác chức năng của chúng với các ví dụ mã thực tế. Đặc biệt tôi đã xem xét lại: Command and Strategy, Template and Observer, Decorator and Chain of Responsibility, Interpreter and Visitor.
Theo Wikipedia, thuật ngữ "đường cú pháp" được đặt ra vào năm 1964. http://en.wikipedia.org/wiki/Syntactic_sugar – Huxi
"phần lớn nhất của các mẫu thiết kế GoF chỉ là giải pháp cho sự vắng mặt của các hàm lớp đầu tiên "Mặc dù tôi nghĩ rằng đó là sự thật Tôi tự hỏi làm thế nào phổ biến là loại suy nghĩ, bao nhiêu java 8/9 giúp loại bỏ loại câu chuyện – binithb