แนวคิดของรูปแบบโรงงานเรียบง่าย
มันคือการสร้างคลาสโรงงานและสร้างอินสแตนซ์ของบางคลาสที่ใช้อินเทอร์เฟซเดียวกัน สาระสำคัญของรูปแบบโรงงานอย่างง่ายคือคลาสโรงงานจะกำหนดอินสแตนซ์ของคลาสผลิตภัณฑ์ (คลาสผลิตภัณฑ์เหล่านี้ที่สืบทอดมาจากคลาสหลักหรืออินเตอร์เฟส) ควรสร้างขึ้นตามพารามิเตอร์ที่เข้ามา
แผนภาพ UML ของโหมดโรงงานง่ายๆ
รหัสรูปแบบโรงงานอย่างง่าย
เมื่อฉันเรียนรู้แบบจำลองโรงงานง่าย ๆ ฉันใช้ตัวอย่างที่เกี่ยวข้องกับมนุษย์ มนุษย์แบ่งออกเป็นชายและหญิงในโลกและแรกกำหนดอินเทอร์เฟซนามธรรมสำหรับผลิตภัณฑ์ของมนุษย์
/** * นี่คือแพ็คเกจรูปแบบโรงงาน */แพ็คเกจ com.roc.factory;/** * อินเทอร์เฟซนามธรรมของผลิตภัณฑ์มนุษย์ * @author liaowp * */อินเตอร์เฟสสาธารณะมนุษย์ {โมฆะสาธารณะพูด ();}จากนั้นทั้งชายและหญิงมีวิธีพูด
/** * นี่คือแพ็คเกจรูปแบบโรงงาน */แพ็คเกจ com.roc.factory;/** * ผู้ชายคน * @author liaowp * */คนระดับสาธารณะใช้มนุษย์ {/ * พูดวิธี * @See Com.roc.factory.human#พูด () */@Override โมฆะสาธารณะพูด () - /** * นี่คือแพ็คเกจรูปแบบโรงงาน */แพ็คเกจ com.roc.factory;/** ผู้หญิง * @author liaowp * */ชั้นเรียนสาธารณะผู้หญิงใช้มนุษย์ {/ * วิธีการพูด * @see com.roc.factory.human#say () */@override void สาธารณะพูด () {system.out.out.println ( -ในที่สุดเขียนชั้นเรียนโรงงานเพื่อสร้างชายและหญิง วิธีแรกทำได้โดยใช้การตัดสินเชิงตรรกะ
แพ็คเกจ com.roc.factory;/** * Simple Factory * @author liaowp * */คลาสสาธารณะ samplefactory {public Static มนุษย์ makehuman (ประเภทสตริง) {ถ้า (type.equals ("man")) {มนุษย์มนุษย์ = คนใหม่ (); คนกลับมา; } อื่นถ้า (type.equals ("womman")) {ผู้หญิงมนุษย์ = ผู้หญิงใหม่ (); ผู้หญิงกลับมา; } else {system.out.println ("ไม่สามารถผลิตได้"); คืนค่า null; -วิธีที่สองคือการใช้รังสี Java เพื่อใช้งาน ฉันคิดว่าการใช้งานประเภทนี้ดีกว่า
แพ็คเกจ com.roc.factory;/** * การใช้รังสีจากโรงงานอย่างง่าย * @author liaowp * */คลาสสาธารณะตัวอย่าง factory1 {makehuman มนุษย์คงที่ (คลาส C) {มนุษย์มนุษย์ = null; ลอง {human = (มนุษย์) class.forname (c.getName ()). newInstance (); } catch (InstantiationException e) {// todo catch block system.out.out.println ("คลาสนามธรรมหรืออินเทอร์เฟซไม่รองรับ"); E.PrintStackTrace (); } catch (unglemalAccessException e) {// todo catch block catch auto-generated e.printstacktrace (); System.out.println ("ไม่มีสิทธิ์เพียงพอนั่นคือวัตถุส่วนตัวไม่สามารถเข้าถึงได้"); } catch (classnotfoundexception e) {// todo catch block ที่สร้างอัตโนมัติที่สร้างขึ้นอัตโนมัติระบบ. E.PrintStackTrace (); } กลับมนุษย์; -ในที่สุดรหัสของลูกค้า
แพ็คเกจ com.roc.factory;/** * การทดสอบจากโรงงานอย่างง่าย * @author liaowp * */ไคลเอนต์ระดับสาธารณะ {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// มนุษย์ = samplefactory.makehuman ("man"); // man.say (); samplefactory.makehuman ("tttt"); มนุษย์ = SampleFactory1.MakeHuman (man.class); man.say (); ผู้หญิงมนุษย์ = samplefactory1.makehuman (ผู้หญิง. class); Woman.Say (); - สถานการณ์แอปพลิเคชันโหมดโรงงานง่ายๆ
ข้อดี: คลาสโรงงานเป็นกุญแจสำคัญสำหรับทั้งรุ่น มันมีการตัดสินเชิงตรรกะที่จำเป็นและกำหนดว่าควรสร้างวัตถุคลาสที่เฉพาะเจาะจงตามข้อมูลที่ได้รับจากโลกภายนอก ด้วยการใช้คลาสโรงงานโลกภายนอกสามารถกำจัดสถานการณ์ที่น่าอับอายของการสร้างวัตถุผลิตภัณฑ์ที่เฉพาะเจาะจงโดยตรงและจำเป็นต้องรับผิดชอบต่อวัตถุ "การบริโภค" เท่านั้น ไม่สำคัญว่าวัตถุเหล่านี้จะถูกสร้างและจัดระเบียบอย่างไร ความรับผิดชอบและสิทธิของพวกเขาได้รับการชี้แจงซึ่งเอื้อต่อการเพิ่มประสิทธิภาพของสถาปัตยกรรมซอฟต์แวร์ทั้งหมด
ข้อเสีย: เนื่องจากคลาสโรงงานมุ่งเน้นไปที่ตรรกะการสร้างของทุกกรณีละเมิดหลักการของการจัดสรรความรับผิดชอบที่เหนียวแน่นสูงตรรกะการสร้างทั้งหมดมีความเข้มข้นในชั้นเรียนหนึ่งชั้น คลาสที่สามารถสร้างได้สามารถพิจารณาได้ล่วงหน้าเท่านั้น หากจำเป็นต้องเพิ่มคลาสใหม่ระดับโรงงานจะต้องเปลี่ยนแปลง เนื่องจากจำนวนหมวดหมู่ผลิตภัณฑ์เฉพาะในระบบยังคงเพิ่มขึ้นอาจมีข้อกำหนดสำหรับคลาสโรงงานในการสร้างอินสแตนซ์ที่แตกต่างกันตามเงื่อนไขที่แตกต่างกัน การตัดสินเงื่อนไขและการตัดสินของประเภทผลิตภัณฑ์เฉพาะนี้เชื่อมโยงกันทำให้ยากที่จะหลีกเลี่ยงการแพร่กระจายของฟังก์ชั่นโมดูลซึ่งไม่เอื้ออำนวยต่อการบำรุงรักษาระบบและการขยายตัว
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น