5
point of accept () method ใน Visitor pattern คืออะไร?
มีการพูดคุยมากมายเกี่ยวกับการแยกอัลกอริทึมออกจากคลาส แต่มีสิ่งหนึ่งที่ไม่สามารถอธิบายได้ พวกเขาใช้ผู้เยี่ยมชมเช่นนี้ abstract class Expr { public <T> T accept(Visitor<T> visitor) {visitor.visit(this);} } class ExprVisitor extends Visitor{ public Integer visit(Num num) { return num.value; } public Integer visit(Sum sum) { return sum.getLeft().accept(this) + sum.getRight().accept(this); } public Integer visit(Prod prod) { return prod.getLeft().accept(this) * prod.getRight().accept(this); } แทนที่จะเรียกการเยี่ยมชม (องค์ประกอบ) โดยตรงผู้เยี่ยมชมจะขอให้องค์ประกอบเรียกวิธีการเยี่ยมชม มันขัดแย้งกับความคิดที่ประกาศในชั้นเรียนไม่รู้เกี่ยวกับผู้เยี่ยมชม …