Javaのデザインパターン - Visitorパターン

記事のディレクトリ

背景

これは、最近、古代の鉄の詳細な分析を構築してきた、とさえ骨は免れました。なぜ古代の鉄はとても人気でしたか?なぜ古代鉄強いので今日も例外ではありません、古代の鉄のデザインのアイデアを見て、あなたが理解します!ここでは、私はあなたがチキンスープの波を植え付けるあげる、諺に:ずさんな主要なイベントに。成功した人々は、時間のいくつかの愚かな些細な廃棄物のために、自分の上で最も重要なものに時間とエネルギーを費やし、そしてべきではありません。
古代の鉄の主な仕事は、アクション、攻撃である、この非修理の仕事は、通常、他の誰かに委託され、それは、唯一、次のように具体的な実装の詳細があり、古代の鉄を修復するのに役立つ他の人のためにアクセスインタフェースを提供する必要がありました。

実現

ボディ抽象クラス

/**
 * 机体抽象类
 */
public abstract class Robot {
	
	private String name;

	/**
	 * 攻击是机体自己做的事情
	 */
	abstract void attack();

	/**
	 * 维修是别人帮忙做的事情
	 * 
	 * @param visitor 交给维修人员(访问者)来做
	 */
	abstract void repair(IVisitor visitor);

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

古代鉄

/**
 * 又是我们的古铁..
 */
public class AncientIron extends Robot {

	@Override
	void attack() {
		System.out.println("自己操纵古铁还是非常有乐趣的,左轮打桩机!");
	}

	@Override
	void repair(IVisitor visitor) {
		visitor.visit(this);
	}

}

訪問者インタフェース

public interface IVisitor {

	/**
	 * 访问机体的功能
	 */
	void visit(Robot robot);
}

メンテナンススタッフ

public class RobotRepairer implements IVisitor {

	@Override
	public void visit(Robot robot) {
		System.out.println(robot.getName() + ",你好!所谓成大事者不拘小节,维修这种事情还是让我们修理工做吧!");
	}

}

テスト

public class Test {

	public static void main(String[] args) {
		IVisitor repairer = new RobotRepairer();

		Robot ancientIron = new AncientIron();
		ancientIron.setName("古铁");
		ancientIron.attack();
		ancientIron.repair(repairer);
	}
}

テスト結果

自己操纵古铁还是非常有乐趣的,左轮打桩机!
古铁,你好!所谓成大事者不拘小节,维修这种事情还是让我们修理工做吧!

概要

訪問者のモデルは明らかな利点を持っている、単一責任の原則に従ってくださいいくつかの非仕事のアプローチがあるクラスを想定し、達成するために訪問者にこれらのメソッドを考慮することです。変更があった後にロジックが実装あれば、訪問者はこのクラスを変更するには多くを行うことなしに、変更する必要があります。

おすすめ

転載: blog.csdn.net/cblstc/article/details/93708835
おすすめ