เมนูนำทาง
แบบแผนอินเทอร์พรีเตอร์ ตัวอย่างโปรแกรมตัวอย่างโปรแกรมเพื่อคำนวณหาพื้นที่รูปสามเหลี่ยมโดยสูตร พื้นที่รูปสามเหลี่ยม = 1/2 * ความยาวฐาน * ความสูง
อินเตอร์เฟส Expression
เป็นแม่แบบของส่วนประกอบต่างๆ ของคอมโพสิต นิยามเมธอด evaluate()
เพื่อให้แต่ละองค์ประกอบประเมินผลในส่วนของตัวเองและองค์ประกอบย่อยที่อยู่ภายใต้ ในที่นี้เราใช้ HashMap
เป็น context เพื่อส่งผ่านค่าคัวแปรไปให้คลาสชนิด Variable
ใช้ในการประเมินผล
import java.util.HashMap;public interface Expression { public double evaluate(HashMap<String, Double> context) throws Exception;}
คลาส Multiplication
เปรียบเสมือนเครื่องหมายคูณ สามารถมีองค์ประกอบย่อยได้สองตัวคือตัวคูณข้างซ้ายและตัวคูณข้างขวา
import java.util.HashMap;public class Multiplication implements Expression { private final Expression operand1; private final Expression operand2; public Multiplication(Expression operand1, Expression operand2) { this.operand1 = operand1; this.operand2 = operand2; } public double evaluate(HashMap<String, Double> context) throws Exception { return operand1.evaluate(context) * operand2.evaluate(context); }}
คลาส Division
เปรียบเสมือนเครื่องหมายหาร สามารถมีองค์ประกอบย่อยได้สองตัวคือตัวถูกหารและตัวหาร
import java.util.HashMap;public class Division implements Expression { private final Expression operand1; private final Expression operand2; public Division(Expression operand1, Expression operand2) { this.operand1 = operand1; this.operand2 = operand2; } public double evaluate(HashMap<String, Double> context) throws Exception { return operand1.evaluate(context) / operand2.evaluate(context); }}
คลาส Constant
เปรียบเสมือนค่าคงที่ในสมการ ไม่มีองค์ประกอบย่อย
import java.util.HashMap;public class Constant implements Expression { private final double value; public Constant(double value) { this.value = value; } public double evaluate(HashMap<String, Double> context) { return value; }}
คลาส Variable
เปรียบเสมือนตัวแปรในสมการ มีหน้าที่หาค่าของตนเองจาก context ไม่มีองค์ประกอบย่อย
import java.util.HashMap;public class Variable implements Expression { private final String name; public Variable(String name) { this.name = name; } public double evaluate(HashMap<String, Double> context) throws Exception { Double value = context.get(name); if (value == null) throw new Exception("Unbound variable: " + name); return value; }}
การเรียกใช้งาน
HashMap<String, Double> context = new HashMap<String, Double>();context.put("base", 10.0);context.put("height", 5.0);Expression two = new Constant(2);Expression base = new Variable("base");Expression height = new Variable("height");Expression multi = new Multiplication(base, height);Expression triangleArea = new Division(multi, two);double result = triangleArea.evaluate(context);
เมนูนำทาง
แบบแผนอินเทอร์พรีเตอร์ ตัวอย่างโปรแกรมใกล้เคียง
แบบแผนการออกแบบซอฟต์แวร์ แบบแผนซิงเกิลตัน แบบแผนโรงงานนามธรรม แบบแผนแฟกทอรีเมธอด แบบแผนผู้สังเกต แบบแผนประกอบรวม แบบแผนฟะซาด แบบแผนอะแดปเตอร์ แบบแผนเทมเพลตเมธอด แบบแผนอินเทอร์พรีเตอร์แหล่งที่มา
WikiPedia: แบบแผนอินเทอร์พรีเตอร์ https://web.archive.org/web/20060904144039/http://...