Latest web development tutorials
×

设计模式 หลักสูตร

รูปแบบการออกแบบ รู้เบื้องต้นเกี่ยวกับรูปแบบการออกแบบ โหมดโรงงาน แบบโรงงานย่อ รูปแบบเดี่ยว รุ่นสร้าง รุ่นต้นแบบ อะแดปเตอร์รุ่น สะพานโหมด รูปแบบตัวกรอง โหมดการทำงานร่วมกัน มัณฑนากร รูปแบบซุ้ม ฟลายเวท โหมดพร็อกซี่ ห่วงโซ่ของรูปแบบความรับผิดชอบ โหมดคำสั่ง รูปแบบล่าม โหมดซ้ำแล้วซ้ำอีก รูปแบบที่เป็นสื่อกลาง รูปแบบของที่ระลึก รูปแบบการสังเกตการณ์ รูปแบบของรัฐ null Object Model โหมดกลยุทธ์ โหมดแม่แบบ รูปแบบของผู้เข้าชม MVC โหมด โหมดตัวแทน โหมดนิติบุคคลองค์ประกอบ รูปแบบการเข้าถึงข้อมูลของวัตถุ รูปแบบการควบคุมด้านหน้า intercepting รูปแบบตัวกรอง รูปแบบการบริการผู้แทนจำหน่าย วัตถุ Transfer รุ่น

设计模式其他

ทรัพยากรโหมดออกแบบ

รูปแบบล่าม

รูปแบบ Interpreter (ล่ามแบบ) มีวิธีการประเมินผลการศึกษาไวยากรณ์การแสดงออกหรือภาษาซึ่งเป็นประเภทของรูปแบบที่ โหมดนี้ใช้อินเตอร์เฟซการแสดงออกที่อธิบายบริบทโดยเฉพาะอย่างยิ่ง รุ่นนี้จะใช้ในการแยกวิเคราะห์ SQL เครื่องมือประมวลผลสัญลักษณ์

การแนะนำ

เจตนา: ป.ร. ภาษากำหนดเป็นตัวแทนของไวยากรณ์และกำหนดล่ามล่ามใช้โลโก้ในการตีความประโยคในภาษา

โซลูชั่นหลัก: ไวยากรณ์ถาวรที่มีการสร้างประโยคที่จะอธิบายล่าม

เมื่อจะใช้: ถ้าความถี่ของประเภทใดประเภทหนึ่งของปัญหาคือสูงพอก็อาจจะคุ้มค่าตัวอย่างของปัญหาแต่ละคนจะแสดงเป็นประโยคง่ายๆในภาษาที่เพื่อให้คุณสามารถสร้างล่ามล่ามในการแก้ไขปัญหาโดยการแปลความหมายของประโยคเหล่านี้

วิธีการแก้ไข: สมาชิกต้นไม้ไวยากรณ์คำนิยามของ Terminator และ nonterminal

รหัสสำคัญ: สภาพแวดล้อมระดับสมาชิกบางข้อมูลทั่วโลกมีล่ามนอกมักจะ HashMap

ตัวอย่างการใช้งาน: คอมไพเลอร์และการประเมินผลการแสดงออกทางคณิตศาสตร์

ข้อดี: 1, scalability ที่ดีขึ้นและมีความยืดหยุ่น2 เพิ่มวิธีใหม่ในการแปลความหมายของการแสดงออก 3, ง่ายต่อการใช้ไวยากรณ์ที่เรียบง่าย

ข้อเสีย: 1, สามารถใช้ประโยชน์จากที่เกิดเหตุมีขนาดค่อนข้างเล็ก2. สำหรับไวยากรณ์ที่ซับซ้อนยากที่จะรักษา 3 อธิบายโหมดจะทำให้เกิดการเรียนเพื่อขยาย 4 โหมดอธิบายโดยใช้วิธีการโทร recursive

สถานการณ์การใช้งาน: 1 สามารถตีความประโยคภาษาจะต้องมีตัวแทนจากต้นไม้ไวยากรณ์นามธรรม2 บางส่วนของปัญหาที่เกิดขึ้นอาจจะเป็นภาษาที่ง่ายในการแสดง 3 ไวยากรณ์ง่ายที่จะอธิบายถึงที่เกิดเหตุ

หมายเหตุ: คุณสามารถใช้ฉากที่ค่อนข้างเล็ก, JAVA ถ้าคุณพบสามารถ expression4J แทน

การสำนึก

เราจะสร้างและใช้อินเตอร์เฟซที่แสดงออกอินเตอร์เฟซที่ระดับการแสดงออกนิติบุคคลตามที่กำหนดไว้ในบริบทของTerminalExpressionล่ามเงินต้น ชั้นเรียนอื่น ๆOrExpression,AndExpression สำหรับการสร้างการแสดงออกโมดูลาร์

InterpreterPatternDemo ชั้นสาธิตของเราใช้ระดับการแสดงออกในการสร้างกฎการแยกและการแสดงออกนำเสนอ

รูปแบบล่ามแผนภาพ UML

ขั้นตอนที่ 1

สร้างอินเตอร์เฟซที่แสดงออก

Expression.java

public interface Expression {
   public boolean interpret(String context);
}

ขั้นตอนที่ 2

สร้างคลาสนิติบุคคลดำเนินการเชื่อมต่อดังกล่าวข้างต้น

TerminalExpression.java

public class TerminalExpression implements Expression {
	
   private String data;

   public TerminalExpression(String data){
      this.data = data; 
   }

   @Override
   public boolean interpret(String context) {
      if(context.contains(data)){
         return true;
      }
      return false;
   }
}

OrExpression.java

public class OrExpression implements Expression {
	 
   private Expression expr1 = null;
   private Expression expr2 = null;

   public OrExpression(Expression expr1, Expression expr2) { 
      this.expr1 = expr1;
      this.expr2 = expr2;
   }

   @Override
   public boolean interpret(String context) {		
      return expr1.interpret(context) || expr2.interpret(context);
   }
}

AndExpression.java

public class AndExpression implements Expression {
	 
   private Expression expr1 = null;
   private Expression expr2 = null;

   public AndExpression(Expression expr1, Expression expr2) { 
      this.expr1 = expr1;
      this.expr2 = expr2;
   }

   @Override
   public boolean interpret(String context) {		
      return expr1.interpret(context) && expr2.interpret(context);
   }
}

ขั้นตอนที่ 3

InterpreterPatternDemoใช้ระดับการแสดงออกในการสร้างกฎระเบียบและแก้ไขปัญหา

InterpreterPatternDemo.java

public class InterpreterPatternDemo {

   //规则:Robert 和 John 是男性
   public static Expression getMaleExpression(){
      Expression robert = new TerminalExpression("Robert");
      Expression john = new TerminalExpression("John");
      return new OrExpression(robert, john);		
   }

   //规则:Julie 是一个已婚的女性
   public static Expression getMarriedWomanExpression(){
      Expression julie = new TerminalExpression("Julie");
      Expression married = new TerminalExpression("Married");
      return new AndExpression(julie, married);		
   }

   public static void main(String[] args) {
      Expression isMale = getMaleExpression();
      Expression isMarriedWoman = getMarriedWomanExpression();

      System.out.println("John is male? " + isMale.interpret("John"));
      System.out.println("Julie is a married women? " 
      + isMarriedWoman.interpret("Married Julie"));
   }
}

ขั้นตอนที่ 4

ตรวจสอบการส่งออก

จอห์นเป็นชาย? ทรู
จูลี่เป็นผู้หญิงที่แต่งงานแล้ว? ทรู