Javaのデザインパターン - インタプリタモード

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/cblstc/article/details/93735996

記事のディレクトリ

背景

変更は、形状を変更し、各プロパティが変更されたさらにすることができます。本体アセンブリの複数を組み合わせることで、それがより強力になります。ケース本体と変形シミュレーション演算、インタプリタモードを実現します。

実現

式インタフェース

public interface Expression {

	String interpreter();
	
}

式の最後:体の名前を表します

/**
 * 终结符:代表着机体的名称
 */
public class RobotTerminalExpression implements Expression {
	
	private String name;
	
	public RobotTerminalExpression(String name) {
		super();
		this.name = name;
	}

	@Override
	public String interpreter() {
		return name;
	}

}

非ターミナルの式:変形

/**
 * 非终结符:变形操作
 */
public class TransformNonTerminalExpression implements Expression {
	
	private Expression exp;

	public TransformNonTerminalExpression(Expression exp) {
		super();
		this.exp = exp;
	}

	public Expression getExp() {
		return exp;
	}

	public void setExp(Expression exp) {
		this.exp = exp;
	}

	@Override
	public String interpreter() {
		String transformTo = "";
		switch (exp.interpreter()) {
		case "R1":
			transformTo = "R-Wing";
			break;
		case "野生兽":
			transformTo = "野生兽(FM)";
			break;
		default:
			transformTo = "非法的变形操作!";
			break;
		}
		
		return transformTo;
	}

}

非ターミナルの式:フィット

/**
 * 非终结符-》合体操作
 */
public class CombineNonTerminalExpression implements Expression {
	
	private Expression exp1;
	
	private Expression exp2;
	
	private Expression exp3;
	
	public CombineNonTerminalExpression(Expression exp1, Expression exp2) {
		super();
		this.exp1 = exp1;
		this.exp2 = exp2;
	}

	public CombineNonTerminalExpression(Expression exp1, Expression exp2, Expression exp3) {
		super();
		this.exp1 = exp1;
		this.exp2 = exp2;
		this.exp3 = exp3;
	}

	@Override
	public String interpreter() {
		if ("R1".equals(exp1.interpreter()) && "R2".equals(exp2.interpreter()) && "R3".equals(exp3 == null? "" : exp3.interpreter())) {
			return "SRW";
		} else if ("Gunner".equals(exp1.interpreter()) && "晓击霸MKII-R".equals(exp2.interpreter())) {
			return "MKII-Gunner";
		} else {
			return "非法的合体操作!";
		}
	}

}

テスト

public class Test {

	public static void main(String[] args) {
		// 终结符
		Expression ancientIronExpression = new RobotTerminalExpression("古铁");
		Expression r1Expression = new RobotTerminalExpression("R1");
		Expression r2Expression = new RobotTerminalExpression("R2");
		Expression r3Expression = new RobotTerminalExpression("R3");
		Expression gunnerExpression = new RobotTerminalExpression("Gunner");
		Expression mkiiExpression = new RobotTerminalExpression("晓击霸MKII-R");
		Expression wildExpression = new RobotTerminalExpression("野生兽");
		
		// 测试变形
		TransformNonTerminalExpression transformExpression = new TransformNonTerminalExpression(ancientIronExpression);
		System.out.println("古铁 变形->" + transformExpression.interpreter());
		transformExpression.setExp(r1Expression);
		System.out.println("R1 变形->" +transformExpression.interpreter());
		transformExpression.setExp(wildExpression);
		System.out.println("野生兽 变形->" +transformExpression.interpreter());
		
		System.out.println("-----------------");
		// 测试合体
		CombineNonTerminalExpression combineExpression = new CombineNonTerminalExpression(gunnerExpression, mkiiExpression);
		System.out.println("Gunner 合体  晓击霸MKII-R->" + combineExpression.interpreter());
		combineExpression = new CombineNonTerminalExpression(r1Expression, r2Expression, r3Expression);
		System.out.println("R1 合体  R2 合体 R3->" + combineExpression.interpreter());
		combineExpression = new CombineNonTerminalExpression(r1Expression, r2Expression);
		System.out.println("R1 合体  R2->" + combineExpression.interpreter());
	}
	
}

テスト結果

古铁 变形->非法的变形操作!
R1 变形->R-Wing
野生兽 变形->野生兽(FM)
-----------------
Gunner 合体  晓击霸MKII-R->MKII-Gunner
R1 合体  R2 合体 R3->SRW
R1 合体  R2->非法的合体操作!

概要

最後に、設計パターン22 - 解釈モードだけでなく、理解がより困難に、この例の演算子を使用しないために、私はそれを近似演算子として、それほど好適な例ではないかもしれない、体の適合および変形操作を考え。

第22条には、実際の月の時間内で断続的に駆動され、またこれらの記事は、変更や改善、避けられないと間違っていきます、特定のシナリオと、各モードの長所と短所に行くために、私はの重要な教えてください願っていますこれらの記事に対する態度。

あなたがゲームをプレイしていない場合は、いくつかのエピソードが共振を持っていないかもしれません。
これは、わずか3分を体験して、あなたがプレイしていない革新的なバージョンであり、あなたは私がゲームと恋に落ちる気に入るだろう- zzhで

おすすめ

転載: blog.csdn.net/cblstc/article/details/93735996