design pattern trong java

194 35 0
design pattern trong java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

PHẦN 2: MẪU THIẾT KẾ JAVA Trần Văn Dũng, Khoa Công nghệ Thông tin, Đại học Giao thông Vận tải BIÊN DỊCH Tài liệu gốc: “Java Design Patterns: Reusable solutions to common problems” Rohit Joshi, nhà xuất Exelixis Media, P.C, 2015 BÀI MỞ ĐẦU Mẫu thiết kế Như người phát triển phần mềm nghĩ code chứa lợi ích cung cấp ngơn ngữ lập trình hướng đối tượng Code mà viết mềm dẻo đến mức mà thay đổi tùy ý mà không làm tổn hại nhiều Code tái sử dụng, tái sử dụng nơi mà lo lắng Chúng ta bảo trì code dễ dàng thay đổi đến phần code không làm ảnh hưởng đến phần khác code Khơng may ưu điểm khơng tự đến Như người phát triển, trách nhiệm thiết kế code theo cách cho cho phép code mềm dẻo, dễ bảo trì tái sử dụng Thiết kế nghệ thuật đến với kinh nghiệm Nhưng có tập giải pháp viết số nhà phát triển tiên tiến có kinh nghiệm, mà đối mặt giải vấn đề thiết kế tương tự Các vấn đề biết đến Mẫu thiết kế Mẫu thiết kế kinh nghiệm thiết kế mã hướng đối tượng Mẫu thiết kế giải pháp sử dụng tổng quan cho vấn đề xuất hoàn cảnh giống Đây kinh nghiệm thực tế tốt sử dụng nhà phát triển tiên tiến Mẫu khơng phải code hồn chỉnh, sử dụng nháp mà áp dụng giải vấn đề Mẫu tái sử dụng, chúng áp dụng cho tốn thiết kế tương tự khơng liên quan đến lĩnh vực Nói cách khác, nghĩ mẫu tài liệu hình thức mà chứa tốn thiết kế lặp lại giải pháp Một mẫu sử dụng bối cảnh thực tế tái sử dụng bối cảnh khác Nói chung mẫu có bốn thành phần cốt yếu sau: • • Tên mẫu: sử dụng để cung cấp tên có ý nghĩa cho mẫu mà định nghĩa toán thiết kế giải pháp cho Đặt tên cho mẫu thiết kế giúp cho tham chiếu đến mẫu khác dễ dàng Làm cho việc cung cấp tài liệu dễ dàng từ vựng làm cho dễ dàng nghĩ mẫu thiết kế Bài tốn mơ tả áp dụng mẫu Nó giải thích vấn đề bối cảnh Nó mơ tả toán thiết kế chuyên biệt biểu diễn thuật toán đối tượng Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” • • Nó mơ tả lớp cấu trúc đối tượng mà có dấu hiệu thiết kế khơng mềm dẻo Đơi tốn bao gồm danh sách điều kiện mà cần thỏa mãn trước áp dụng mẫu Lời giải mô tả thành phần mà tạo nên thiết kế, quan hệ, nhiệm vụ tương tác chúng Giải pháp không code đầy đủ, làm việc nháp mà thực hện với code Thay vào đó, mẫu cung cấp mơ tả tổng quát toán thiết kế xếp thành phần (các lớp đối tượng trường hợp chúng ta) để giải vấn đề Kết hệ việc áp dụng mẫu Hệ phần mềm thường liên quan đến việc cân thời gian không gian Chúng đụng chạm đến ngơn ngữ chí phí cài đặt Vì việc tái sử dụng thường yếu tố thiết kế hướng đối tượng, nên hệ mẫu bao gồm tác động đến tính mềm dẻo, mở rộng chuyển mang hệ thống Liệt kê hệ giúp cho hiểu đánh giá tầm quan trọng chúng Tạo phải sử dụng Mẫu thiết kế • Tính mềm dẻo: sử dụng mẫu thiết kế code bạn trở nên mềm dẻo Nó giúp cung cấp mức độ khái quát theo đối tượng trở nên gắn kết lỏng lẻo với làm cho code bạn dễ thay đổi • Tính tái sử dụng: Các đối tượng lớp gắn kết lỏng lẻo làm cho code bạn dễ tái sử dụng Kiểu code trở nên dễ dàng kiểm thử so sánh với kiểu code gắn kết chặt chẽ • Từ vựng chia sẻ: Từ vựng chia sẻ làm cho dễ dàng chia sẻ code suy nghĩ bạn với thành viên khác đội Nó làm tăng hiểu biết lẫn thành viên liên quan đến code • Nắm bắt thực tiễn tốt nhất: Thiết kế mẫu nắm bắt giải pháp mà thành công áp dụng cho toán Bằng cách học mẫu vấn đề liên quan, người phát triển chưa có kinh nghiệm học nhiều điều thiết kế phần mềm Mẫu thiết kế làm cho dễ dàng tái sử dụng thiết kế kiến trúc thành công Các kỹ thuật chứng minh thực tiễn mẫu thiết kế làm cho chúng truy cập dễ cho người phát triển hệ thống Mẫu thiết kế giúp cho bạn chọn lựa chọn thiết kế mà làm cho hệ thống tái sử dụng tránh lựa chọn mà tái sử dụng thỏa hiệp Mẫu thiết kế giúp soạn tài liệu bảo trì hệ thống tồn việc gắn kết với đặc tả tường minh tương tác lớp, đối tượng chủ đích bên Mẫu thiết kế giúp người thiết kế có thiết kế nhanh Chọn sử dụng mẫu Có số mẫu thiết kế để chọn; để chọn cái, bạn cần có kiến thức tốt số Có nhiều mẫu thiết kế mà nhìn qua,thấy chúng giống Chúng giải gần giống kiểu tốn thiết kế có phần cài đặt tương tự Bạn cần phải hiểu sâu chúng để cài đặt mẫu thiết kế cho toán thiết kế cụ thể Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Trước hết bạn cần nhận diện kiểu toán thiết kế mà bạn đối mặt Một tốn thiết kế cần phân loại thành nhóm khởi tạo, nhóm cấu trúc hay nhóm hành vi Dưa phân loại bạn lọc mẫu lựa chọn phù hợp Chẳng hạn • • • Ở có nhiều khởi tạo lớp mà biểu diễn vật, giá trị tính chất đối tượng, chúng sử dụng để đọc: bạn cần lựa chọn mẫu Singleton cho tốn thiết kế đó, mà đảm bảo có khởi tạo cho tồn ứng dụng Nó giúp giảm kích thước nhớ Các lớp phụ thuộc nhiều vào Một thay đổi lớp tác động đến lớp phụ thuộc khác, bạn cần phải sử dụng Bridge, Mediator Command để giải toán thiết kế Có hai giao diện khơng tương thích khác hai phần khác code, bạn cần chuyển đổi giao diện sang giao diện khác mà sử dụng code client để làm cho toàn code làm việc: mẫu thiết kế Adapter đáp ứng yêu cầu toán thiết kế Một mẫu thiết kế sử dụng để giải nhiều toán thiết kế, toán thiết kế giải nhiều mẫu thiết kế Có thể có nhiều toán thiết kế lời giải cho chúng, chọn mẫu thiết kế mà vừa khít phụ thuộc vào kiến thức hiểu biết bạn mẫu thiết kế Nó phụ thuộc vào code mà bạn có tay Phân loại mẫu thiết kế Các mẫu thiết kế chia thành ba loại sau: • • • Các mẫu khởi tạo Các mẫu cấu trúc Các mẫu hành vi 4.1 Các mẫu khởi tạo Các mẫu thiết kế khởi tạo sử dụng để thiết kế tiến trình tạo đối tượng Một mẫu khởi tạo sử dụng kế thừa để đa dạng việc tạo đối tượng Có hai chủ đề tái diễn mẫu Trước hết, tất chúng đóng gói kiến thức việc lớp cụ thể hệ thống sử dụng Thứ hai, chúng che dấu việc khởi tạo lớp thực gộp với Mọi việc mà hệ thống biết đối tượng giao diện chúng định nghĩa bới lớp trừu tượng Kéo theo, mẫu khởi tạo cho bạn nhiều mềm dẻo việc tạo, tạo chúng, tạo Có thể có số trường hợp hai hay nhiều hơn, mẫu trông phù hợp cho lời giải tốn thiết kế Đơi khi, hai mẫu bù trừ nhau, chẳng hạn: mẫu Builder dùng với mẫu khác để cài đặt thành phần xây dựng 4.2 Các mẫu cấu trúc Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Các mẫu cấu trúc liên quan đến việc lớp đối tượng kết hợp để tạo cấu trúc lớn Các mẫu lớp cấu trúc kế thừa để kết hợp tạo giao diện cài đặt Một ví dụ đơn giản, xét đa kế thừa trộn hai nhiều lớp vào Kết lớp kết hợp tính chất lớp cha Mẫu đặc biệt hữu ích để tạo cho thư viện lớp phát triển độc lập làm việc với Ngoài việc kết hợp giao diện cài đặt, mẫu cấu trúc mô tả cách kết hợp đối tượng để thực chức Tính mềm dẻo bổ sung việc tích hợp đối tượng đến từ khả thay đổi việc tích hợp thời gian thực mà khơng thể việc tích hợp lớp tĩnh 4.3 Các mẫu hành vi Các mẫu hành vi liên quan đến thuật toán việc gán trách nhiệm đối tượng Các mẫu hành vi không mô tả mẫu đối tượng lớp mà mẫu truyền thơng chúng Các mẫu khắc họa dòng điều khiển phức tạp mà khó tuân thủ thời gian thực Chúng làm cho bạn khỏi bận tâm vào dòng điều khiển, cho phép bạn tập trung vào cách đối tượng kết nối với Các mẫu hành vi sử dụng kết hợp đối tượng giao diện Một số mơ tả nhóm đối tượng phối hợp để thực nhiệm vụ mà không đối tượng riêng rẽ thực Vấn đề quan trọng đối tượng ngang hàng biết Các nút hàng ngang trì tham chiếu tường minh đến nhau, điều làm tăng gắn kết chúng Mẫu Mediator tránh làm điều việc đưa vào đối tượng trung gian mediator nút hàng ngang Mediator cung cấp điều hướng cần thiết cho đối tượng gắn kết lỏng lẻo Dưới bảng rõ danh sách mẫu thuộc nhóm phân loại nào: Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” BÀI MẪU THIẾT KẾ ADAPTER Mẫu thiết kế Adapter Người phát triển phần mềm Max, làm việc xây dựng website thương mại điện tử Website cho phép người sử dụng mua trả tiền trực tuyến Trang tích hợp với cổng trả tiền bên thứ ba, mà theo người sử dụng cần trả hóa đơn sử dụng thẻ credit card họ Mọi việc tiến triển tốt, quản lý dự án kêu thay đổi chút Quản lý dự án nói họ phải thay đổi nhà cung cấp cổng trả tiền, họ cần phải cài đặt lại điều Vấn đề nảy sinh trang đính vào cổng trả tiền Xpay mà sử dụng đối tượng kiểu Xpay Nhà cung cấp PayD, cho phép dùng đối tượng kiểu PayD để xử lý Max không muốn thay đổi toàn tập khoảng 100 lớp tham chiếu đến đối tượng kiểu Xpay Nó tiềm ẩn rủi ro cho Dự án, mà gần đưa vào sử dụng Anh ta thay đổi công cụ cổng trả tiền bên thứ ba Vấn đề xảy giao diện khơng tương thích hai phần code Để tiến trình tiếp tục làm việc, Max cần phải tìm cách làm cho code tương thích với API cung cấp cổng trả tiền Code với API Xpay Bây giao diện code không tương thích với API cổng trả tiền Mẫu Adapter giải cứu Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Cái mà Max cần mẫu Adapter, mà nằm code API nhà cung cấp mới, cho phép tiến trình tiếp tục làm việc Nhưng trước đưa giải pháp, xem Adapter làm việc Đơi khi, có kịch hai đối tượng không khớp nhau, chúng cần lắp ghép để hồn thành cơng việc Tình phát sinh tìm cách tích hợp code có với code mới, thay đổi API bên thứ ba Nó xảy giao diện khơng tương thích hai đối tượng mà khơng khớp với Mẫu Adapter mẫu cấu trúc, cho phép bạn lắp đối tượng hay lớp đặt vào đối tượng hay lớp khác Nó chuyển đổi giao diện lớp sang giao diện khác mà client mong đợi Nó cho phép lớp làm việc với nhau, có giao diện khơng tương thích Nó cho phép xác lập giao diện đối tượng lớp mà không thay đổi trực tiếp đối tượng lớp Bạn nghĩ Adapter giống chuyển ổ thực tế mà sử dụng để kết nối hai thiết bị mà không nối trực tiếp với Một Adapter nằm thiết bị phép luồng vào từ thiết bị chảy sang thiết bị khác dạng mà muốn, khơng khơng nối hai thiết bị với Một Adapter sử dụng kết hợp để lưu đối tượng mà hỗ trợ thích nghi, phương thức Adapter triệu gọi, chuyển lời gọi thành điều mà đối tượng thích nghi hiểu truyền lời gọi đến đối tượng thích nghi Code mà gọi Adapter khơng cần biết khơng tương tác với kiểu đối tượng mà nghĩ, mà thay vào đối tượng thích nghi Giải pháp cho tốn Giao diện Xpay trơng sau: Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Nó chứa tập phương thức set get thông tin thẻ tên chủ tài khoản Giao diện Xpay cài đặt code mà sử dụng để tạo đối tượng kiểu đưa đối tượng cho API cổng trả tiền Lớp sau xác định cài đặt cho giao diện Xpay: Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Giao diện nhà cung cấp trông sau: Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Như bạn thấy, giao diện có tập phương thức khác mà cần cài đặt code Nhưng Xpay tạo hầu hết phần khác code, thật sư khó rủi ro thay đổi tồn tập lớp Chúng ta cần cách khác, mà thực yêu cầu nhà cung cấp để xử lý trả tiền mà cung làm cho code thời khơng thay đổi Cách cung cấp mẫu Adapter Chúng ta tạo Adapter mà kiểu PayD bao bọc đối tượng kiểu Xpay Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” 10 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Khi sử dụng mẫu thiết kế Decorator Sử dụng mẫu Decorator trường hợp sau: • • • Bổ sung trách nhiệm cho đối tượng riêng lẻ cách động suốt, mà không làm ảnh hưởng đến đối tượng khác Đối với trách nhiệm mà gỡ bỏ Khi mở rộng lớp Đôi số lớn mở rộng độc lập tạo bùng nổ lớp để hỗ trợ tổ hợp Hoặc định nghĩa lớp che dấu ngược lại khơng sẵn sàng cho tách lớp 180 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” BÀI 23 MẪU THIẾT KẾ ITERATOR Mở đầu Các đối tượng hợp lại danh sách, cần cho bạn cách truy cập đến phần tử mà khơng cần mở cấu trúc bên Hơn nữa, ạn muốn duyệt danh sách theo cách khác nhau, phụ thuộc dựa bạn muốn thực Nhưng bạn khơng muốn làm phồng lên giao diện List với thao tác cho duyệt khác nhau, bạn thấy trước bạn cần Bạn có nhiều duyệt chưa định danh sách Mẫu Iterator cho phép bạn làm việc Ý tưởng mẫu nhận trách nhiệm để truy cập duyệt đối tượng danh sách list đặt chúng vào đối tượng Iterator Lớp Iterator định nghĩa giao diện để truy cập phần tử danh sách Một đối tượng Iterator có trách nhiệm giữ theo dõi phần tử thời; vậy, biết phần tử viếng thăm Mẫu Iterator Mục đích mẫu thiết kế Iterator cung cấp cách truy cập phần tử đối tượng hợp lại cách mà không mở biểu diễn bên Mẫu Iterator cho phép đối tượng client truy cập đến nội dung vật chứa theo cách tuần tự, mà khơng biết thể bên nội dung Thuật ngữ vật chứa container, sử dụng trên, đơn giản định nghĩa họ liệu đối tượng Các đối tượng bên vật chứa đến lượt họ họ Mâu Iterator cho phép đối tượng client duyệt qua họ đối tượng (hay vật chứa) mà không mở vật chứa xem liệu bên lưu Để làm việc đó, mẫu Iterator đề xuất đối tượng Container cần thiết kế để cung cấp giao diện public dạng đối tượng Iterator cho đối tượng client khác truy cập đến nội dung Một đối tượng Iterator chứa phương thức public cho phép đối tượng client định hướng qua danh sách đối tượng bên Container 181 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Iterator • Định nghĩa giao diện cho việc truy vấn thăm viếng phần tử ConcreteIterator • • Cài đặt giao diện Iterator Theo dõi vị trị thời viếng thăm hợp phần tử Aggregate • Định nghĩa giao diện tạo đối tượng Iterator ConcreteAggregate • Cài đặt giao diện tạo Iterator để trả khởi tạo ConcreteIterator Cài đặt mẫu thiết kế Iterator Chúng ta cài đặt mẫu thiết kế Iterator sử dụng lớp Shape Chúng ta lưu giữ duyệt đối tượng Shape sử dụng Iterator Lớp Shape đơn giản có Id Name thuộc tính 182 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Lớp sử dụng để lưu giữ đối tượng Shape Lớp chứa mảng kiểu Shape, để đơn giản khởi tạo mảng gồm phần tử Phương thức addShape sử dụng để bổ sung đối tượng Shape vào mảng tăng số lên Phương thứ getShapes trả mảng kiểu Shape 183 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Lớp Iterator cho lớp Shape Lớp cài đặt giao diện Iterator định nghĩa phương thức giao diện Iterator Phương thức hasNext trả giá trị Bool, hay khơng phần tử lại Phương thức next trả phần tử từ họ phương thức remove xóa bỏ phần tử thời khỏi họ Code cho kết đầu sau: Trong lớp trên, tạo đối tượng ShapeStorage lưu giữ đối tượng Shapes Tiếp theo, tạo đối tượng ShapeIterator gán cho shape Chúng ta lặp hai lần, lần đầu khơng gọi phương thức remove sau có gọi remove Đầu ra cho bạn tác động remove Tại vòng lặp đầu tiên, iterator in shape phương thức remove gọi , trước hết in shape thời sau remove shape Sau đó, gọi phương thức remove mà loại bỏ phần tử thời iterator trỏ đến đối tượng shape sẵn sàng Đó sao, đầu thay đổi thành “Áp dụng removing iterating…” đưa đối tượng 0, 184 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Iterator bên bên ngồi Một Iterator thiết kế iterator bên iterator bên 4.1 Iterator bên • Một họ thân đề xuất phương thức mà cho phép client viếng thăm đối tượng khác bên họ Chẳng hạn, lớp Java.util.ResultSet chứa liệu đề xuất phương thức next để điều hướng dọc theo danh sách phần tử • Có thể có iterator họ thời điểm • Một họ cần phải trì lưu trạng thái iterator 4.2 Iterator bên ngồi • • • Chức lặp bên tách bạch khỏi họ phần tử giữ bên đối tượng khác tham chiếu iterator Thông thường, thân họ trả đối tượng iterator phù hợp cho client phụ thuộc vào đầu vào client Chẳng hạn, lớp Java.util.Vector có iterator định nghĩa dạng đối tượng riêng kiểu Enumeration Đối tượng trả cho đối tượng client để phản hồi cho lời gọi phương thức element () Có thể có nhiều duyệt iterator họ thời điểm Chi phí cho việc lưu giữ trạng thái iterator khơng liên quan đến họ Nó đối tượng Iterator dành riêng Khi dùng mẫu thiết kế Iterator Sử dụng mẫu Iterator: • • • Để truy cập đến nội dung đối tượng hợp thành mà khơng mở biểu diễn bên Để hỗ trợ duyệt đa chiều đối tượng hợp thành Cung cấp giao diện đồng để duyệt cấu trúc hợp thành khác (như là, hỗ trợ lặp đa hình) 185 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” BÀI 24 MẪU THIẾT KẾ VISITOR Mở đầu Để hiểu mẫu thiết kế Visitor, xem lại mẫu thiết kế Composite Mẫu Composite cho phép bạn tích hợp đối tượng vào cấu trúc để thể phân cấp phần – tổng thể Trong ví dụ mẫu Composite, tạo cấu trúc html hợp thành từ kiểu đối tượng khác Bây giả sử cần bổ sung lớp css vào tag html Một cách làm điều cách bổ sung lớp thêm start tag sử dụng phương thức setStartTag Nhưng đặt code cứng tạo nên tính khơng mềm dẻo code Một cách khác làm điều bổ sung phương thức kiểu addClass lớp trừu tượng HtmlTag Mọi lớp ghi đè phương thức cung cấp lớp css Một nhược điểm cách tiếp cận là, có nhiều lớp (sẽ trang html lớn), trở nên đắt buộc phải cài đặt phương thức lớp Và giả sử, sau cần bổ sung phần tử kiểu khác tag, cần phải làm Mẫu Visitor cung cấp cho bạn cách bổ sung thao tác đối tượng mà không cần thay đổi lớp phần tử, đặc biệt thao tác thay đổi thường xun Mẫu thiết kế Visitor Mục đích mẫu thiết kế Visitor biểu diễn thao tác thực phần tử cấu trúc đối tượng Visitor cho phép bạn định nghĩa thao tác mà không thay đổi lớp phần tử mà thao tác Mẫu Visitor hữu ích thiết kế thao tác dọc theo họ không đồng đối tượng phân cấp lớp Mẫu Visitor cho phép thao tác định nghĩa mà khơng thay đổi lớp đối tượng họ Để thực điều đó, mẫu Visitor đề xuất định nghĩa thao tác lớp riêng tham chiếu lớp visitor Nó tách bạch thao tác khỏi họ đối tượng mà thao tác Vói thao tác định nghĩa mới, lớp visitor tạo Vì thao tác thực dọc theo tập đối tượng, visitor cần có cách truy cập thành viên public đối tượng Yêu cầu đáp ứng cách cài đặt hai ý tưởng thiết kế sau 186 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Visitor • Khai báo thao tác Visit cho lớp ConcreteElement cấu trúc đối tượng Tên đối số thao tác định danh lớp mà gửi yêu cầu visit cho visitor Điều cho phép visitor xác định lớp concrete phần tử cần viếng thăm visited Sau visitor truy cập trực tiếp trực tiếp đến phần tử thông qua giao diên cụ thể ConcreteVisitor • Cài đặt thao tác định nghĩa Visitor Mỗi thao tác cài đặt đoạn thuật toán định nghĩa cho lớp tương ứng đối tượng cấu trúc ConcreteVisitor cung cấp ngữ cảnh cho thuật tốn lưu giữ trạng thái cục Trạng thái thường tích góp kết dọc theo q trình viếng thăm cấu trúc Element • Định nghĩa thao tác Accept mà nhận đối số visitor ConcreteElement Cài đặt thao tác Accept mà nhận đối số visitor ObjectStructure • • • Có thể liệt kê phần tử Có thể cung cấp giao diện mức độ cao phép visitor viếng thăm phần tử Có thể hợp thành họ danh sách tập hợp 187 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Cài đặt mẫu thiết kế Visitor Để cài đặt mẫu thiết kế Visitor, sử dụng Composite Pattern code đưa vào số giao diện, lớp phương thức Cài đặt mẫu Visitor yêu cầu hai giao diện quan trọng, giao diện Element mà chứa phương thức accept với đối số kiểu Visitor Giao diện cài đặt tất lớp mà cần phép visitor viếng thăm chúng Trong trường hợp chúng ta, Htmltag cài đặt giao diện Element, HtmlTag lớp cha trừu tượng lớp html cụ thể, lớp cụ thể kế thừa ghi đè phương thức accept giao diện Element Giao diện khác giao diện Visitor, giao diện chứa phương thức visit với đối số lớp mà cài đặt giao diện Element Lưu ý rằng, yêu cầu hai phương thức lớp HtmlTag chúng ta, getStartTag getEndTag, ngược lại với ví dụ Bài mẫu thiết kế Composite Code lấy từ Ví dụ Bài mẫu thiết kế Composite với thay đổi: 188 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Lớp trừu tượng HtmlTag cài đặt giao diện Element Các lớp cụ thể ghi đè phương thức accept giao diện Element gọi phương thức visit truyền thao tác đối số Điều cho phép phương thức visitor nhận thành viên public đối tượng này, bổ sung thao tác 189 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” 190 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” 191 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Bây giờ, lớp concrete visitor: tạo hai lớp concrete, bổ sung lớp visitor css cho html tag khác thay đổi độ rộng tag sử dụng thuộc tính style html tag Bây kiểm tra ví dụ 192 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” 193 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns” Code in đầu sau: Đầu sau “Before Visitor …” giống với kết Ví dụ Bài mẫu Composite Sau đó, tạo hai concrete visitor bổ sung chúng cho đối tượng concrete html sử dụng phương thức accept Đầu “After visitor …” cho bạn lớp css phần tử style bổ sung cho html tag Lưu ý rằng, ưu điểm mẫu Visitor chỗ thêm thao tác cho đối tượng mà không thay đổi lớp Chẳng hạn, bổ sung số chức Javascript onclick số angular js ng tags mà không thay đổi lớp Khi sử dụng mẫu thiết kế Visitor Sử dụng mẫu thiết kế Visitor khi: • Một cấu trúc đối tượng chứa nhiều lớp đối tượng có khác giao diện bạn muốn thực thao tác đối tượng mà phụ thuộc lớp cụ thể chúng • Nhiều thao tác không liên quan khác cần thực đối tượng cấu trúc đối tượng, muốn tránh làm ảnh hưởng lớp họ với thao tác Visitor cho phép bạn giữ thao tác liên quan định nghĩa chúng lớp Khi cấu trúc đối tượng chia sẻ nhiều ứng dụng, sử dụng Visitor để đặt thao tác ứng dụng mà cần đến chúng • Các lớp định nghĩa cấu trúc đối tượng thay đổi, bạn thường xuyên muốn định nghĩa thao tác cấu trúc Thay đổi lớp cấu trúc đối tượng đòi hỏi định nghĩa lại giao diện giao diện cho visitor, mà phải trả giá Nếu lớp cấu trúc đối tượng thay đổi thường xun, tốt định nghĩa thao tác lớp 194 Trần Văn Dũng, Đại học Giao thông Vận tải, biên dịch “Java Design Patterns”

Ngày đăng: 17/04/2020, 08:39

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan