Tôi đã chuyển qua lại giữa C# và Java trong 8 năm qua.Bạn có sử dụng Mẫu Phương thức Mẫu bằng các ngôn ngữ lập trình có đóng cửa/đại biểu/con trỏ hàm không?
Một điều khiến tôi ngạc nhiên là tôi đã hoàn toàn dừng sử dụng mẫu thiết kế "Phương thức mẫu" trong C#. Trên thực tế, trong C# Tôi đã nghĩ đến mô hình này như là một mô hình chống.
http://en.wikipedia.org/wiki/Template_method_pattern
Coming back to Java, tôi thấy mô hình là sống và đá. Tôi vẫn nghĩ rằng nó trông cổ, nhưng nhận ra rằng không có cách nào khác để làm điều này trong java. Java trông cổ quá;)
Vì điều này sẽ được đưa ra anyway, Tại sao nó là một antipattern?
- Rất nhiều lần sử dụng phân cấp thừa kế của bạn vì "lý do sai".
- Các lớp cơ sở có xu hướng trở nên rải rác với tất cả các loại mã không liên quan.
- Nó buộc bạn phải khóa thiết kế, thường khá sớm trong quá trình phát triển. (Khóa sớm trong nhiều trường hợp)
- Thay đổi điều này ở giai đoạn sau trở nên khó hơn và khó hơn.
Vì vậy, với đóng cửa/đại biểu/con trỏ hàm, bạn thường chuyển một số chức năng thay vì phân lớp phụ.
Vì vậy, trở lại câu hỏi:
Nếu ngôn ngữ của bạn có đóng cửa/đại biểu/chức năng, bạn có sử dụng phương pháp Template, và khi nào?
Thật thú vị khi đọc câu trả lời của bạn. Bạn có thể đưa ra một ví dụ cho nơi mẫu phương pháp mẫu là 'tuyệt đối' là tốt nhất, đặc biệt là khi khớp nối tốt? Chỉ cần giả định khớp nối là xấu luôn! – rpattabi
@ragu: Vấn đề không phải là việc ghép nối tốt hay xấu. Vấn đề là liệu nó là cần thiết hay không cần thiết. Nếu nó là cần thiết thì IMHO cách dễ nhất để thể hiện nó là phương thức mẫu. – dsimcha
Tôi hiểu bạn chỉ để trả lời câu hỏi trong tay. Câu hỏi của tôi là chung chung. Để tôi ghép nối trong mẫu khuôn mẫu là một tác dụng phụ xấu. Bất kỳ ví dụ về khớp nối là tốt? – rpattabi