From 10e307049068d6f8f454336552bc71c8bfa6b0c4 Mon Sep 17 00:00:00 2001 From: PhucVR <59957741+nguyenphuc22@users.noreply.github.com> Date: Wed, 27 Mar 2024 19:44:02 +0700 Subject: [PATCH] Refactor Visitor Pattern documentation --- Writerside/topics/Visitor.md | 45 ++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/Writerside/topics/Visitor.md b/Writerside/topics/Visitor.md index 7731efe..b77290d 100644 --- a/Writerside/topics/Visitor.md +++ b/Writerside/topics/Visitor.md @@ -62,17 +62,44 @@ classDiagram Trong sơ đồ này, `DocumentElement` là một interface đại diện cho các loại phần tử của tài liệu mà có thể được "thăm" bởi các visitor. `Text`, `Table`, và `Image` là các lớp cụ thể biểu diễn các loại phần tử khác -## Cấu trúc +## Cấu trúc của Visitor Pattern -Các thành phần chính trong Visitor Pattern: - -- Visitor: định nghĩa các phương thức thao tác trên các Element. - -- ConcreteVisitor: triển khai các phương thức trên. - -- Element: định nghĩa phương thức accept nhận vào một Visitor. +```mermaid +classDiagram + class Visitor { + +visitConcreteElementA(ConcreteElementA) + +visitConcreteElementB(ConcreteElementB) + } + class ConcreteVisitor1 { + +visitConcreteElementA(ConcreteElementA) + +visitConcreteElementB(ConcreteElementB) + } + class ConcreteVisitor2 { + +visitConcreteElementA(ConcreteElementA) + +visitConcreteElementB(ConcreteElementB) + } + class Element { + +accept(Visitor) + } + class ConcreteElementA { + +accept(Visitor) + } + class ConcreteElementB { + +accept(Visitor) + } + + Visitor <|.. ConcreteVisitor1 : Extends + Visitor <|.. ConcreteVisitor2 : Extends + Element <|.. ConcreteElementA : Extends + Element <|.. ConcreteElementB : Extends + ConcreteElementA ..> Visitor : Uses + ConcreteElementB ..> Visitor : Uses +``` -- ConcreteElement: các lớp cụ thể cần áp dụng thao tác. +- `Visitor` là một interface hoặc abstract class chứa một loạt các phương thức visit(), mỗi phương thức cho một loại element khác nhau. +- `ConcreteVisitor1` và `ConcreteVisitor2` là các lớp cụ thể triển khai interface `Visitor`, cung cấp cách thực hiện cụ thể cho mỗi phương thức visit(). +- `Element` là một interface hoặc abstract class chứa phương thức accept(), trong đó tham số là một đối tượng Visitor. +- `ConcreteElementA` và `ConcreteElementB` là các lớp cụ thể triển khai `Element`, mỗi lớp cung cấp triển khai cụ thể cho phương thức accept(), thường là gọi phương thức visit() của Visitor và truyền chính nó như một đối số. ## Cách triển khai