โหมดโรงงาน
โรงงานรูปแบบ (แบบโรงงาน) Java เป็นส่วนหนึ่งของการใช้กันมากที่สุดรูปแบบการออกแบบ ประเภทของรูปแบบการออกแบบนี้เป็นของสร้างสกีซึ่งมีวิธีที่ดีที่สุดในการสร้างวัตถุ
ในโหมดโรงงานเราจะไม่เปิดเผยให้ลูกค้าในการสร้างตรรกะเมื่อคุณสร้างวัตถุและผ่านการใช้งานติดต่อกันเพื่อชี้ไปยังวัตถุที่สร้างขึ้นใหม่
การแนะนำ
เจตนา: ความหมายของอินเตอร์เฟซของวัตถุที่สร้างขึ้นให้ subclasses ตัดสินใจที่ชั้นเรียนเพื่อยกตัวอย่างโรงงานรูปแบบโรงงานที่จะทำให้กระบวนการของการสร้างความล่าช้าในการย่อยชั้นเรียน
เป็นหลักในการแก้ปัญหา: ปัญหาตัวเลือกหลักของอินเตอร์เฟซ
เมื่อใช้: เมื่อเราอย่างชัดเจนสร้างอินสแตนซ์ที่แตกต่างกันตามแผนเงื่อนไขที่แตกต่าง
วิธีการแก้ไข: ให้ subclasses ที่จะใช้อินเตอร์เฟซที่โรงงานก็เป็นผลิตภัณฑ์ที่เป็นนามธรรมกลับ
รหัสสำคัญ: กระบวนการสร้างดำเนินการใน subclasses ของมัน
ตัวอย่างการใช้งาน: 1, คุณต้องการรถคุณสามารถเลือกจากภายในโรงงานโดยตรงโดยไม่ต้องท่อรถเป็นวิธีที่จะทำเช่นเดียวกับการดำเนินการภายในรถ2 ฐานข้อมูลการแลกเปลี่ยน Hibernate เพียงแค่การเปลี่ยนภาษาและการขับรถสามารถ
ข้อดี: 1, โทรต้องการที่จะสร้างวัตถุเพียงแค่รู้ชื่อของมันกับมัน2 ความยืดหยุ่นสูงถ้าคุณต้องการที่จะเพิ่มสินค้าตราบใดที่การขยายตัวของระดับโรงงานสามารถ 3, การป้องกันการก่อให้เกิดผลิตภัณฑ์โทรที่เกี่ยวข้องเฉพาะกับอินเตอร์เฟซสินค้า
ข้อเสีย: เพิ่มขึ้นของแต่ละผลิตภัณฑ์ที่เราต้องเพิ่มการเรียนและวัตถุเพื่อให้บรรลุโรงงานคอนกรีตดังนั้นจำนวนของการเรียนในระบบเพิ่มขึ้นชี้แจงในระดับบางอย่างเพิ่มความซับซ้อนของระบบ แต่ยังเพิ่มระบบเฉพาะชั้น การพึ่งพาอาศัยกันนี้ไม่ได้เป็นสิ่งที่ดี
สถานการณ์การใช้งาน: 1, Logger: บันทึกอาจถูกบันทึกไปยังดิสก์ท้องถิ่นของคุณยากเหตุการณ์ของระบบเซิร์ฟเวอร์ระยะไกลผู้ใช้สามารถเลือกที่จะเข้าสู่ระบบที่ไหนสักแห่ง2, การเข้าถึงฐานข้อมูลเมื่อผู้ใช้ไม่ทราบชนิดของระบบขั้นสุดท้ายใช้ฐานข้อมูลและฐานข้อมูลอาจมีการเปลี่ยนแปลง 3, การออกแบบกรอบสำหรับการเชื่อมต่อกับเซิร์ฟเวอร์ที่คุณจะต้องทำข้อตกลงสาม "POP3", "IMAP", "HTTP" สามารถที่สามเหล่านี้เป็นหมวดหมู่ผลิตภัณฑ์เพื่อให้เกิดการติดต่อกัน
หมายเหตุ: ในชั้นเรียนสร้างโหมดใดก็ตามที่มันเป็นสิ่งจำเป็นในการสร้างวัตถุที่ซับซ้อนคุณสามารถใช้รูปแบบการโรงงานสิ่งหนึ่งที่ควรทราบก็คือสถานที่สำหรับวัตถุที่ซับซ้อนโดยใช้รูปแบบโรงงานและวัตถุง่ายโดยเฉพาะอย่างยิ่งต้องการเพียงจะแล้วเสร็จภายในวัตถุใหม่ที่สร้างขึ้นโดยไม่ต้องใช้รูปแบบโรงงาน หากคุณใช้รูปแบบโรงงานมันเป็นสิ่งจำเป็นที่จะแนะนำระดับโรงงานก็จะเพิ่มความซับซ้อนของระบบ
การสำนึก
เราจะสร้างอินเตอร์เฟซที่ระดับนิติบุคคลและการดำเนินการอินเตอร์เฟซที่รูปร่างรูปทรงขั้นตอนต่อไปคือการกำหนดระดับชั้นโรงงานShapeFactory
FactoryPatternDemo สาธิตของเราที่จะได้รับการเรียนการใช้วัตถุรูปร่างShapeFactory มันจะส่งข้อมูล(วงกลม/ สี่เหลี่ยมผืนผ้า / square) เพื่อShapeFactory ก็ต้องการที่จะได้รับชนิดของวัตถุ
ขั้นตอนที่ 1
สร้างอินเตอร์เฟซ
Shape.java
รูปร่างอินเตอร์เฟซที่สาธารณะ { วาดเป็นโมฆะ (); }
ขั้นตอนที่ 2
สร้างคลาสนิติบุคคลที่ใช้อินเตอร์เฟซ
Rectangle.java
เรียนสาธารณะสี่เหลี่ยมผืนผ้ารูปร่างดำเนิน { @Override วาดโมฆะสาธารณะ () { System.out.println ( "ภายในสี่เหลี่ยมผืนผ้า :: วาด () วิธีการ."); } }
Square.java
เรียนสาธารณะสแควร์ใช้รูปร่าง { @Override วาดโมฆะสาธารณะ () { System.out.println ( "สแควร์ภายใน :: วาด () วิธีการ."); } }
Circle.java
วงกลมเรียนสาธารณะดำเนินรูปร่าง { @Override วาดโมฆะสาธารณะ () { System.out.println ( "ภายในวงกลม :: วาด () วิธีการ."); } }
ขั้นตอนที่ 3
สร้างโรงงานเพื่อผลิตชั้นเรียนนิติบุคคลวัตถุที่อยู่บนพื้นฐานของข้อมูลที่ได้รับมา
ShapeFactory.java
ShapeFactory คลาสที่สาธารณะ { // ใช้ getShape วิธีการที่จะได้รับวัตถุของรูปร่างรูปทรงประเภทประชาชน getShape (String shapeType) ความ { ถ้า (shapeType == null) { กลับ NULL; } ถ้า (shapeType.equalsIgnoreCase ( "วงกลม")) { กลับแวดวงใหม่ (); } else if (shapeType.equalsIgnoreCase ( "สี่เหลี่ยม")) { กลับสี่เหลี่ยมผืนผ้าใหม่ (); } else if (shapeType.equalsIgnoreCase ( "สแควร์")) { กลับสแควร์ใหม่ (); } กลับ NULL; } }
ขั้นตอนที่ 4
ใช้โรงงานที่จะได้รับวัตถุนิติบุคคลของการเรียนโดยการส่งผ่านข้อมูลประเภท
FactoryPatternDemo.java
FactoryPatternDemo คลาสที่สาธารณะ { ประชาชนเป็นโมฆะคง main (String args []) { ShapeFactory shapeFactory = ShapeFactory ใหม่ (); // รับวัตถุวงกลมและเรียกวิธีการวาดรูปร่างของมัน shape1 = shapeFactory.getShape ( "วงกลม"); // เรียกวิธีการวาดของ shape1.draw วงกลม (); // รับวัตถุสี่เหลี่ยมผืนผ้าและเรียกมัน shape2 วิธีการวาดรูปร่าง = shapeFactory.getShape ( "สี่เหลี่ยม"); // เรียกวิธีการวาดของ shape2.draw สี่เหลี่ยมผืนผ้า (); // รับวัตถุ Square และเรียกวิธีการวาดรูปร่างของมัน shape3 = shapeFactory.getShape ( "สแควร์"); // เรียกวิธีวาดรูปสี่เหลี่ยม shape3.draw (); } }
ขั้นตอนที่ 5
ตรวจสอบการส่งออก
ภายในวงกลม :: วาด () วิธีการ ภายในสี่เหลี่ยมผืนผ้า :: วาด () วิธีการ ภายในจัตุรัส :: วาด () วิธีการ