You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Writerside/topics/Visitor.md
+115-5
Original file line number
Diff line number
Diff line change
@@ -101,15 +101,125 @@ classDiagram
101
101
-`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.
102
102
-`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ố.
103
103
104
-
## Cách triển khai
104
+
## Cách triển khai Visitor Pattern
105
105
106
-
Để triển khai Visitor trong Java, ta có thể:
106
+
Hãy tưởng tượng một ứng dụng Zoo, nơi bạn muốn thực hiện các hoạt động khác nhau đối với các loài động vật mà không cần thay đổi các lớp động vật. Ví dụ, bạn muốn thực hiện "Feeding" và "Exercising" cho các loài động vật khác nhau. Đây là một tình huống lý tưởng để sử dụng Visitor Pattern.
107
107
108
-
- Định nghĩa interface Visitor với các phương thức visit tương ứng với từng Element.
108
+
### 1. Interface Visitor
109
109
110
-
- Các Element có phương thức accept nhận vào một Visitor.
110
+
Đây là Visitor, định nghĩa các hoạt động (trong trường hợp này là Feeding và Exercising) cho mỗi loại động vật.
111
111
112
-
- Các ConcreteVisitor triển khai các phương thức visit.
112
+
```java
113
+
publicinterfaceAnimalVisitor {
114
+
voidvisit(Lionlion);
115
+
voidvisit(Tigertiger);
116
+
voidvisit(Elephantelephant);
117
+
}
118
+
```
119
+
120
+
### 2. Interface Element
121
+
122
+
Đây là Element, mô tả các loài động vật trong zoo.
123
+
124
+
```java
125
+
publicinterfaceAnimal {
126
+
voidaccept(AnimalVisitorvisitor);
127
+
}
128
+
```
129
+
130
+
### 3. Concrete Visitor Classes
131
+
132
+
Các lớp này triển khai `AnimalVisitor` để xác định cách thức thực hiện các hoạt động cho từng loài động vật.
Trong ví dụ này, `FeedingVisitor` và `ExercisingVisitor` đại diện cho các hoạt động cụ thể được thực hiện trên các loài động vật. Mỗi loài động vật (`Lion`, `Tiger`, `Elephant`) đều triển khai interface `Animal` và định nghĩa phương thức `accept()` để chấp nhận `AnimalVisitor`. Phần demo `ZooVisitorDemo` minh họa cách thức các `Animal` được "thăm" bởi các `AnimalVisitor` để thực hiện feeding và exercising mà không cần sửa đổi code trong các lớp `Animal`.
0 commit comments