1. 程式人生 > >Java設計模式菜鳥系列(二十)直譯器模式建模與實現

Java設計模式菜鳥系列(二十)直譯器模式建模與實現

直譯器模式(Interpreter):它定義了物件與物件之間進行某種操作之後會得到什麼值。一般主要應用在OOP開發中的編譯器的開發中,所以適用面比較窄。

一、uml建模:


二、程式碼實現

/**
 * 直譯器模式(Interpreter):它定義了物件與物件之間進行某種操作之後會得到什麼值。
 * 
 * 一般主要應用在OOP開發中的編譯器的開發中,所以適用面比較窄。
 * 
 * 示例:先定義一個實體類,封裝兩個變數num1、num2
 */
class Entity {
	private double num1;
	private double num2;

	public Entity(double num1, double num2) {
		this.num1 = num1;
		this.num2 = num2;
	}

	public double getNum1() {
		return num1;
	}

	public void setNum1(double num1) {
		this.num1 = num1;
	}

	public double getNum2() {
		return num2;
	}

	public void setNum2(double num2) {
		this.num2 = num2;
	}
}

/**
 * 運算介面
 */
interface Operatable {
	public double interpreter(Entity entity);
}

/**
 * 加法運算
 */
class AddOperation implements Operatable {

	@Override
	public double interpreter(Entity entity) {
		return entity.getNum1() + entity.getNum2();
	}
}

/**
 * 減法運算
 */
class MinusOperation implements Operatable {

	@Override
	public double interpreter(Entity entity) {
		return entity.getNum1() - entity.getNum2();
	}
}

/**
 * 客戶端測試類
 * 
 * @author Leo
 */
public class Test {
	public static void main(String[] args) {
		/**
		 * 建立加法、減法運算
		 */
		AddOperation addOperation = new AddOperation();
		MinusOperation minusOperation = new MinusOperation();
		/**
		 * 一、分步運算
		 */
		double addResult = addOperation.interpreter(new Entity(20, 30));
		double minusResult = minusOperation.interpreter(new Entity(20, 30));
		System.out.println("addResult = " + addResult);
		System.out.println("minusResult = " + minusResult);
		/**
		 * 二、混合運算
		 */
		double mixResult = new AddOperation().interpreter(new Entity(
				addOperation.interpreter(new Entity(20, 30)), minusOperation
						.interpreter(new Entity(40, 50))));
		System.out.println("mixResult = " + mixResult);
	}
}

三、總結

直譯器模式用來做各種各樣的直譯器,如正則表示式的直譯器等等。