1. บทนำสู่รูปแบบโรงงานง่ายๆ
โหมดโรงงานอย่างง่ายหรือที่เรียกว่า "โหมดวิธีการคงที่ของโรงงาน" มันเป็นของ "สร้างโหมด" (รูปแบบสำหรับการสร้างวัตถุ) และเป็นการใช้งานพิเศษของรูปแบบ "วิธีโรงงาน"
โดยปกติเราใช้รูปแบบโรงงานง่าย ๆ เพื่อสร้างคลาส ตัวอย่างเช่นการได้รับวัตถุพูลเธรดทำได้ผ่านโหมดโรงงานอย่างง่าย แผนภาพโครงสร้างมีดังนี้:
โรงงาน: โรงงานเป็นแกนหลักของแบบจำลองโรงงานอย่างง่ายและให้อินเทอร์เฟซภายนอก เมื่อไคลเอนต์หรือโปรแกรมอื่น ๆ ต้องการรับวัตถุผลิตภัณฑ์พวกเขาจะได้รับผ่านอินเทอร์เฟซโรงงาน
ผลิตภัณฑ์บทคัดย่อ: ผลิตภัณฑ์ที่เป็นนามธรรมถูกแยกออกจากผลิตภัณฑ์ที่แตกต่างกัน ผลิตภัณฑ์สามารถเป็นอินเทอร์เฟซหรือคลาสนามธรรม
ผลิตภัณฑ์เฉพาะ: วัตถุผลิตภัณฑ์ที่ส่งคืนในโรงงานถูกสร้างขึ้นจริงผ่าน concreteproduct
2. โมเดลรหัสรูปแบบโรงงานอย่างง่าย
โรงงานระดับสาธารณะ {ผลิตภัณฑ์คงที่สาธารณะ newInstance () {ส่งคืนคอนกรีตใหม่ (); }} ผลิตภัณฑ์บทคัดย่อสาธารณะ {} คลาสสาธารณะคอนกรีตโปรเทคขยายผลิตภัณฑ์ {concreteproduct () {}}} ไดอะแกรมคลาสของรุ่น
3. การประยุกต์ใช้แบบจำลองโรงงานง่าย ๆ
เมื่อเราเขียน servlet เพื่อจัดการคำขอของลูกค้าเรามักจะจัดการกับ logics ทางธุรกิจหลายรายการใน servlet หนึ่งตัวอย่างเช่น:
เป็นโมฆะที่ได้รับการป้องกัน dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) {String Flag = request.getParameter ("Flag"); if (flag.equals ("service1")) {service1 (); } อื่นถ้า (flag.equals ("service2")) {service2 (); -ข้างต้นเป็นวิธีการทั่วไปของ servlet ของเราในการจัดการตรรกะหลายธุรกิจและเขียนพวงของงบถ้าอื่น วิธีที่ดีกว่าคือการแยกการกระจายที่ร้องขอออกจาก servlet เพื่อให้เซิร์ฟเล็ตจัดการตรรกะทางธุรกิจเท่านั้น เราถือว่า Servlets ที่ร้องขอต่าง ๆ เป็นคลาสผลิตภัณฑ์ javax.servlet.httpservlet เป็นคลาสหลักของผลิตภัณฑ์และ javax.servlet.servlet เป็นอินเทอร์เฟซผลิตภัณฑ์ ด้วยวิธีนี้เรากำหนด servletfactory แยกวิเคราะห์คำขอ URL ในตัวกรองและส่งมอบให้กับ ServletFactory สำหรับการประมวลผล นี่คือแอปพลิเคชั่นโรงงานง่าย ๆ ทั่วไป
@WebFilter ("/transRequest") คลาสสาธารณะ TransRequest ใช้ตัวกรอง {สตริงส่วนตัว servletName; @Override โมฆะสาธารณะ dofilter (คำขอ ServletRequest, การตอบสนอง servletResponse, ห่วงโซ่ FilterChain) พ่น IOException, ServleTexception {httpservletRequest myRequest = (httpservletRequest); // รับชื่อ servlet ที่ร้องขอที่นี่เรายอมรับว่าคำขออยู่ในรูปแบบของ/servletName ชื่อสตริง [] = myRequest.getRequesturi (). trim (). แยก ("/"); servletName = ชื่อ [2]; if (servletName! = null) {// ต่อไปนี้เป็นสองตัวอย่างทั่วไปของโรงงานง่าย ๆ servlet servlet = servletfactory.createServlet (servletName); servlet.service (คำขอ, การตอบกลับ); } else chain.dofilter (คำขอ, การตอบกลับ); - ทุกครั้งที่เราขอคำขอเราใช้โรงงานเพื่อผลิตเซิร์ฟเล็ตซึ่งสามารถหลีกเลี่ยงการกำหนดค่าข้อมูลเส้นทาง servlet จำนวนมากใน XML และสิ่งนี้จะทำให้ตรรกะชัดเจนขึ้นและ Servlets จัดการธุรกิจในระดับธุรกิจเท่านั้น
หมวดหมู่จากโรงงานมีดังนี้:
คลาสสาธารณะ servletfactory {สาธารณะคงที่ servlet createServlet (String servletName) พ่น servletexception {if (servletName.equals ("servletName1")) {ส่งคืนบริการใหม่ 1 (); } else if (servletName.equals ("servletName2")) {return ใหม่ service2 (); } else {โยน servletexception ใหม่ ("ไม่มี servlet ดังกล่าว"); -แม้ว่าชั้นเรียนจากโรงงานข้างต้นจะไม่ทำให้ยุ่งยากหากมีความคิดในการใช้โรงงานง่าย ๆ ยังคงแก้ปัญหาบางอย่าง โรงงานง่าย ๆ เป็นรูปแบบการออกแบบที่ง่ายมากที่ไม่สามารถพิจารณารูปแบบการออกแบบได้และปัญหาที่แก้ไขก็มี จำกัด เช่นกัน มีการดำเนินการแจกจ่ายคำขอข้างต้นแล้ว ตัวอย่างเช่น struts2 แน่นอนเฟรมเวิร์กไม่ใช่โรงงานง่ายๆ
4. สรุป
แบบจำลองโรงงานอย่างง่ายโดยสรุปคือคลาสโรงงานอินเทอร์เฟซผลิตภัณฑ์ (อันที่จริงมันยังสามารถเป็นคลาสนามธรรมหรือแม้แต่คลาสแม่ธรรมดา) และกลุ่มของผลิตภัณฑ์เฉพาะที่ใช้อินเทอร์เฟซผลิตภัณฑ์ คลาสโรงงานนี้สร้างคลาสการใช้งานที่เฉพาะเจาะจงตามพารามิเตอร์ที่ผ่านและแปลงขึ้นเป็นอินเทอร์เฟซตามผลลัพธ์