ตัวอย่างโปรแกรม ของ แบบแผนอินเทอร์พรีเตอร์

ภาษาจาวา

ตัวอย่างโปรแกรมเพื่อคำนวณหาพื้นที่รูปสามเหลี่ยมโดยสูตร พื้นที่รูปสามเหลี่ยม = 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);

ใกล้เคียง

แบบแผนการออกแบบซอฟต์แวร์ แบบแผนซิงเกิลตัน แบบแผนโรงงานนามธรรม แบบแผนแฟกทอรีเมธอด แบบแผนผู้สังเกต แบบแผนประกอบรวม แบบแผนฟะซาด แบบแผนอะแดปเตอร์ แบบแผนเทมเพลตเมธอด แบบแผนอินเทอร์พรีเตอร์