一、訪問者模式
1、訪問者模式
訪問者模式(Visitor Pattern)是一種行為型模式。它允許在不修改已有類結構的情況下,向類中添加新的操作。訪問者模式通過將操作封裝在一個訪問者對象中,使得可以在不改變各個元素類的前提下,實現對元素的新操作。
2、實現思路
被訪問者(元素對象),訪問者;
被訪問者需要關聯到訪問者;訪問者實現被訪問者的方法;
(1)、定義被訪問者規范(綁定到訪問者中,和其他自身行為)(水果)
(2)、編寫被訪問者實現類,實現綁定和規范行為(蘋果,葡萄)
(3)、編寫訪問者規范(每一種被訪問者的訪問方法)(商店)
(4)、編寫訪問者的實現類,實現訪問的具體方法(水果商店)
(5)、實例化被訪問者,實例化訪問者,被訪問者綁定到訪問者中
二、代碼示例
1、示例場景
水果商店添加水果,添加新的水果,不用修改之前的水果信息和綁定信息
2、代碼示例
// 1、定義被訪問者規范(水果)
public interface Fruit {void accept(Shop shop); // 定義綁定關系void info();
}
// 2.1、定義被訪問者實現類(蘋果)
public class Apple implements Fruit {@Overridepublic void accept(Shop shop) {shop.visit(this); // 實現訪問者綁定被訪問者}@Overridepublic void info() {System.out.println("蘋果");}
}
// 2.2、定義被訪問者實現類(葡萄)
public class Garpe implements Fruit {@Overridepublic void accept(Shop shop) {shop.visit(this); // 實現訪問者綁定被訪問者}@Overridepublic void info() {System.out.println("葡萄");}
}
// 3、編寫訪問者規范
public interface Shop {void visit(Garpe garpe); // 通過綁定訪問被訪問者葡萄void visit(Apple apple); // 通過綁定訪問被訪問者蘋果
}
// 4、編寫訪問者實現類,水果商店
public class FruitShop implements Shop {@Overridepublic void visit(Garpe garpe) {System.out.println("添加了新水果!" );garpe.info();}@Overridepublic void visit(Apple apple) {System.out.println("添加了新水果!" );apple.info();}
}// 5、測試public static void main(String[] args) {Fruit apple = new Apple(); // 被觀察者Garpe garpe = new Garpe();Shop shop = new FruitShop(); // 觀察者apple.accept(shop); // 被觀察者被觀察者觀察garpe.accept(shop);}
總結:
訪問者模式,主要包含訪問者和被訪問者兩種角色的實體,兩者之間相互關聯,被訪問者依附于訪問者,訪問者可以訪問被訪問者的方法。
學海無涯苦作舟!!!