Table of Contents

การ เข้าใจ รูป แบบ การ ทรง สร้าง สาม อย่าง

รูปแบบการออกแบบซอฟต์แวร์ คือ แบบที่ทดลองใช้ในการต่อสู้ สําหรับแก้ปัญหาการออกแบบซ้ําได้ เป็นหนึ่งในรูปแบบที่ใช้บ่อยที่สุด คือ รูปแบบการสร้าง -- Singleton, Processy, และ Protott; การปกครองว่าวัตถุถูกกระตุ้นอย่างไร การเลือกรหัสที่ใช่ ผลกระทบที่มีผลต่อการรักษาความทนทาน, และความน่าดึงดูดใจ โดยเพิ่มแนวทางการดําน้ําลึกเข้าไปในแต่ละรูปแบบ สืบค้นสถานการณ์ในโลกแห่งความเป็นจริง และจัดทํากิจกรรมได้เพื่อให้คุณตัดสินใจได้โดยทันที

รูป แบบ ของ ซิงเกิล ตัน: ความ ไม่ แยแส อย่าง หนึ่ง ที่ จะ ครอบ ครอง พวก เขา

รูป แบบ ชีวิต แบบ เดียว กัน นี้ ทํา ให้ แน่ ใจ ว่า มี การ ใช้ แบบ เดียว กัน และ มี การ ใช้ แบบ นี้ ไป ทั่ว โลก แต่ ก็ มัก จะ ใช้ อย่าง ผิด ๆ แนว คิด หลัก คือ ควบคุม กระบวนการ เร่ง เร่ง รีบ เพื่อ ว่า ไม่ ว่า จะ มี การ ขอ ให้ นัก เรียน ทํา มาก เท่า ไร ก็ ตาม จะ มี การ นํา วัตถุ ชิ้น เดียว กัน มา ใช้ อีก ครั้ง

ซิงเกิลตันทํางานอย่างไร

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

public class DatabaseConnectionPool {
 private static DatabaseConnectionPool instance;
 private DatabaseConnectionPool() { /* initialization */ }
 public static synchronized DatabaseConnectionPool getInstance() {
 if (instance == null) {
 instance = new DatabaseConnectionPool();
 }
 return instance;
 }
}

เมื่อซิงเกิล ตัน ส่อง แสง

  • [FLT: 0] กรมทรัพยากรร่วม: สระว่ายน้ําเชื่อมต่อ,บริการทําไม้ หรือผู้จัดการการปรับแต่ง ผลประโยชน์จากจุดเดียวของการประสานงาน (FLT: 1).
  • [FLT: 0] สถานะโลก: เมื่อแคชแบบเรียกข้อมูลแบบประยุกต์ หรือระบบลงทะเบียนต้องการเข้าถึงอย่างสม่ําเสมอ
  • [FLT: 0] Hardrware หรือ OS-ระดับทรัพยากร:[[FLT: 1) ระบบไฟล์, spoolers เครื่องพิมพ์ หรือตัวจัดการหน้าต่างโดยทั่วไปอนุญาตให้ใช้เพียงหนึ่งตัว

หลุม พราง ทั่ว ไป ที่ ควร หลีก เลี่ยง

  • [FLT: 0] Offuse: ใช้ซิงเกิลตันสําหรับทุกอย่าง ที่นําไปสู่การซ่อนความขึ้นต่อกัน และทําให้การทดสอบหน่วยยากเพราะคุณไม่สามารถแทนที่ตัวทดลองได้โดยคําเยาะเย้ย
  • [FLT: 0] ค่าใช้จ่ายการรักษาความปลอดภัย: วิธีคลาสสิกที่ปรับให้ตรงกัน สามารถกลายเป็นคอขวด ทางเลือกอื่นเช่นการเริ่มต้นที่กระตือรือร้น หรือการล็อคคู่ (ด้วยความผันผวน) ลดการโต้แย้ง
  • Teleet Complex: เนื่องจากจุดเข้าโลกเป็นรหัสยาก ลูกค้ากลายเป็นคู่กับคลาสคอนกรีตซิงเกิลตัน ละเมิดหลักการความเสมอภาค (Colf Internect Interfect Incontinution Inccess)

เพื่อ จะ เข้าใจ ลึก ซึ้ง ขึ้น ดู [FLT: 0] การ ปรับ ปรุง ไกด์ ซิงเกิล ตัน [FLT: 1).

รูปแบบขององค์ประกอบ: การมอบวัตถุที่ถูกสร้างขึ้น

รูปแบบแฟคทอรี ครอบคลุมตรรกะการกระตุ้นของออบเจ็กต์ อนุญาตให้คลาสย่อยตัดสินว่าระดับไหนที่จะเร่งให้ทันที ประกอบด้วยสองรสหลัก: [FLT: 0] วิธีการขยาย [FLT: 1) (FT: 1) (วิธีเดี่ยวที่ส่งวัตถุกลับมา) และ (FT: 2) Abtract Pact Facty[FLT: 3] (วิธีโรงงานที่เกี่ยวข้อง) ทั้ง 2 ชนิดนี้มาจากระบบของไคลเอนต์แบบ คอนกรีต, การขยายและการขยายข้อมูลแบบย่อ, การขยายผลุปชัน (FT: 1).

วิธีการขององค์ประกอบในรายละเอียด

กําหนดส่วนติดต่อผู้ใช้สําหรับสร้างวัตถุ แต่ให้คลาสย่อยเปลี่ยนประเภทของวัตถุที่จะถูกสร้างขึ้น ตัวอย่างเช่น คลาสกล่องโต้ตอบอาจจะมีวิธีการ [FLT: 1). คลาสย่อยเช่น วินโดวส์Dialog และ LinuxDialog แทนวิธีการนี้ เพื่อให้ใช้กลับรุ่นอีกครั้ง

abstract class Dialog {
 abstract Button createButton();
 public void render() {
 Button okButton = createButton();
 okButton.onClick();
 }
}
class WindowsDialog extends Dialog {
 Button createButton() { return new WindowsButton(); }
}

รูปแบบนี้เหมาะที่สุดเมื่อ:

  • คลาสไม่สามารถคาดการณ์ว่า คลาสวัตถุที่มันต้องสร้าง
  • คุณต้องการระบุเหตุผลในการสร้างวัตถุ ในที่เดียว
  • ระบบต้องเป็นอิสระจากการสร้างวัตถุ

แอ็บสแทรค แฟค เทก ซี: การ ปลูก ฝัง ครอบครัว ที่ เกี่ยว พัน กัน ใน เรื่อง วัตถุ

Abstract Factery ให้ส่วนติดต่อในการสร้างครอบครัวที่เกี่ยวข้องหรืออาศัยวัตถุ โดยไม่ต้องระบุรุ่นคอนกรีตของอุปกรณ์แบบ GUI ที่จะต้องสร้างปุ่ม, Checkboxs, และแถบเลื่อน ดูสอดคล้องกันภายใต้ชุดตกแต่งที่กําหนด (เช่น วัตถุ, Cupertino) ลูกข่ายนี้ใช้ส่วนติดต่อแบบนามธรรมในการหาผลิตภัณฑ์ และโรงงานคอนกรีต (Marterial Factory, Cuperfactory) สร้างส่วนเชื่อมโยงให้ถูกต้อง

รูปแบบนี้ชอบเมื่อ:

  • ระบบต้องตั้งค่าด้วยผลิตภัณฑ์หนึ่ง ในหลาย ๆ ครอบครัว
  • คุณต้องบังคับความสอดคล้องระหว่างผลิตภัณฑ์
  • การ เพิ่ม ความ รู้ ใน การ ทํา ผลิตภัณฑ์ ใหม่ ๆ ต้อง มี การ เปลี่ยน แปลง เล็ก น้อย ใน รหัส ที่ มี อยู่.

การ ระบุ ตัว ระหว่าง รูป แบบ การ ก่อ สร้าง กับ แบบ อื่น ๆ

แฟกทอรีคือจุดของคุณเมื่อวัตถุสร้างมีความซับซ้อน หรือเมื่อคุณต้องสลับวิธีต่าง ๆ ในการทํางานในคราวทํางาน มันมีความยืดหยุ่นมากกว่าซิงเกิลตัน เพราะมันไม่ได้จํากัดจํานวนของตัวอย่างหนึ่ง -- มันใช้เฉพาะศูนย์กลางการสร้างเท่านั้น ไม่เหมือนกับโปรโตมิเตอร์, โครงสร้างใหม่ที่สร้างขึ้นจากรอยขีดข่วนแทนการคัดลอกตัวแบบที่มีอยู่ สําหรับภาพรวมของทั้งสองแบบ เข้าร่วม [FTT: 0] การเพิ่มคุณสมบัติของ Guru (FTT: 1) และ[FT] [FT] [FT] tractraphy Prophact [FTIFTSCE]

รูปแบบโปรโตเซลล์: โคลนแทนการสร้าง

รูปแบบโปรโตไทป์สร้างวัตถุใหม่ โดยการคัดลอกวัตถุที่มีอยู่แล้ว -- แบบต้นแบบ (เช่น แบบต้นแบบ) มีมูลค่าโดยเฉพาะเมื่อการกระตุ้น (เช่น พรีเซนชัน) จะมีราคาสูง (เช่น โครงสร้างฐานข้อมูลหนัก, คํานวณเรขาคณิตที่ซับซ้อน) หรือเมื่อค่าปรับแต่งวัตถุนั้นใช้เวลาในการใช้เวลาแทนการสร้างจากจุดข่วน คุณโคลนอินสแตนซ์ที่มีก่อนการปรับเปลี่ยนและปรับเปลี่ยนมันตามต้องการ

โปรแกรมเมอร์ลิง Metchanicals: Silow vs. ลึกคัดลอก

ภาษาโปรแกรมส่วนใหญ่เสนอวิธีการโคลนแบบสร้าง ( ในจาวา [FLT: 4] ใน Python [FLT: 5] หรือเผยแพร่ในจาวาสคริปต์ อย่างไรก็ตาม ต้องจ่ายเงินอย่างระวังเพื่อให้มีการเรียกดูว่าสําเนานั้นตื้น (อ้างอิงร่วมกันกับวัตถุที่ฝังลึก) หรือแบบอิสระ (โดยสมบูรณ์) การคัดลอกวัตถุที่ซ้ํากันอย่างลึกซึ้งนั้นมีการอ้างอิงโดยพวกโคลน เมื่อดําเนินการจัดพิมพ์แบบ Proto คุณต้องตัดสินใจเลือกว่า จะให้มีการคัดลอกตัวใดบ้าง ให้ใช้กรณีของคุณ

class MazePrototype {
 public MazePrototype clone() throws CloneNotSupportedException {
 return (MazePrototype) super.clone(); // shallow copy
 }
}

สัดส่วนของตัวพิมพ์สําหรับ Protoประเภท

  • [FLT: 0] ออบเจ็กต์วัตถุที่สร้างอย่างซับซ้อน: เป็นต้น, การโหลดแฟ้มการปรับแต่งขนาดใหญ่ หรือสร้างเมชเรขาคณิตที่ซับซ้อน
  • [FLT: 0] วัตถุที่ตกค้าง: เมื่อระบบต้องสร้างวัตถุชนิดใหม่ที่ถูกกําหนดไว้ในเวลาทํางาน (เช่น ชนิดศัตรูในเกมที่วางไข่จากต้นแบบที่กําหนดไว้ล่วงหน้า).
  • [FLT: 0] การปะทุของกลุ่มย่อย: แทนการสร้างคลาสย่อยจํานวนมากเพื่อความหลากหลายเล็กน้อย คุณโคลนต้นแบบและปรับเปลี่ยนคุณสมบัติไม่กี่อย่าง

การจําลองและการจับ

คุณสามารถเลือกเพิ่มระดับ prototorm ได้ โดยดําเนินการจัดทํารายการย่อย -- เป็นคลังต้นแบบหลักที่สร้างก่อนงานทําดัชนีด้วยกุญแจ ลูกค้าขอต้นแบบโดยคีย์, โคลน, และปรับแต่งมัน การจับคู่ Prototate นี้สามารถทําหน้าที่เป็นตัวเลือกที่เบาที่สุดสําหรับงานแฟกเตอร์หรือซิงเกิลตันในบางกรณี ดูรายละเอียด [FTT: 0] สืบค้นเมื่อ Prototorm [FTlutor] ของ Groups [FTlutlutlook: 1].

เปรียบเทียบแบบด้าน:ซิงเกิลตัน, แฟคทอรี, โปรโทไทป์

เพื่อ ช่วย คุณ เลือก ตาราง ที่ อยู่ ข้าง ล่าง นี้ เน้น ความ แตก ต่าง ของ กุญแจ:

PatternInstance CountCreation MechanismBest For
SingletonExactly oneSelf-managed global accessShared resources, global state
FactoryMultiple instances (or families)Centralized creation logicDecoupling client from concrete classes, complex creation
PrototypeMultiple instances cloned from a templateCloning (shallow/deep copy)Expensive instantiation, runtime object generation

เมื่อ รูป แบบ การ ตบ หรือ การ รวม ตัว กัน

  • [FLT: 0] Singleton + Factery: โรงงานสามารถเป็นซิงเกิลตัน (เช่น โรงงานหนึ่งส่วนในนามธรรมต่อแพลตฟอร์ม) นี้รวมการเข้าถึงทั่วโลกเข้ากับการสร้างศูนย์กลาง
  • [FLT: 0] Prototate + Factery:[FLT: 1) ต้นแบบสามารถทําหน้าที่เป็นโรงงานได้ -- คุณโคลนต้นแบบแทนการเรียกตัวสร้าง ซึ่งมีประโยชน์เป็นพิเศษในการพัฒนาเกมเมื่อวางไข่
  • [FLT: 0] Prototums + ซิงเกิลตัน:[FLT: 1) วัตถุต้นแบบอาจจะเป็นซิงเกิลตันในความหมายที่ว่า มีต้นแบบเพียงหนึ่งตัวต่อชนิด แม้ว่าโคลนไม่ใช่ซิงเกิล (inton)

การตัดสินใจที่ใช้ได้

เมื่อ คุณ เผชิญ ปัญหา ด้าน การ ออก แบบ ซึ่ง ต้อง มี รูป แบบ การ ทรง สร้าง จง ถาม คํา ถาม เหล่า นี้ ตาม ลําดับ:

  1. [FLT: 0] ผมต้องการตัวอย่างเดียวตลอดการนําไปใช้หรือไม่? ถ้าใช่ ให้พิจารณาซิงเกิลตัน แต่ต้องแน่ใจว่ารัฐที่แบ่งปันกันทั่วโลกเป็นสิ่งจําเป็นอย่างแท้จริง และการทดสอบนั้นจะไม่ประสบผลสําเร็จ
  2. [FLT: 0] วัตถุสร้างมีความซับซ้อนหรือมีแนวโน้มจะเปลี่ยน? [[FLT: 1) ถ้าใช่ ใช้วิธีการของแฟคเตอรี่หรือ Abstract Profiley นี้มีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อคุณคาดหวังว่า จะเพิ่มวัตถุชนิดใหม่ในภายหลัง
  3. [FLT: 0] วัตถุสร้างการแสดงแบบขวด หรือฉันต้องการตัวอย่างที่ต่างไปเล็กน้อย? [[FLT: 1) ถ้าใช่ โปรโทมิเตอร์สามารถประหยัดเวลาและความทรงจําได้โดย การลอกแม่แบบ (FLT: 1).
  4. [FLT: 0] สามารถให้บริการมากกว่าหนึ่งรูปแบบได้หรือ? Evaluate graph-offs. ตัวอย่างเช่น รูปแบบการบินสามารถลดหน่วยความจําได้ แทนที่จะเป็น Protot หากเป้าหมายคือการใช้ข้อมูลการถอดข้อมูลร่วมกัน

ตัว อย่าง ของ โลก จริง ใน ซอฟต์แวร์ วิศวกรรม

โปรแกรมในวิศวกรรมมักจะผสมรูปแบบเหล่านี้กับระบบ CAD ระบบคอมพิวเตอร์ที่สามารถใช้งานซิงเกิลตันสําหรับจัดการปรับแต่งผู้ใช้ได้ เช่น โครงสร้างเรขาคณิตต่าง ๆ (Crack, Pixline), และ Prototoming parts สําหรับการแก้ความซับซ้อน แล้วปรับเปลี่ยนมัน ระบบจําลองสามารถใช้เครื่องมือจําลองสร้างเครื่องมือต่าง ๆ เพื่อสร้างวัตถุต่าง ๆ เพื่อคัดลอกรูปแบบของระบบอนุภาค และซิงเกิลตันสําหรับบริการทําการผลิตที่จําลองขั้นตอนทั้งหมด

สรุป: อย่า ให้ รูป แบบ ของ การ ออก แบบ ของ คุณ เป็น แบบ ที่ ไม่ เหมาะ สม

Onston, Pactory, และ Prototate เป็นรูปแบบการสร้างพื้นฐาน แต่มันไม่ใช่กระสุนเงิน ตัวเลือกที่ดีที่สุดเกิดขึ้นจากการเข้าใจข้อจํากัดของระบบของคุณ: ความจําเป็นในการควบคุม, ความซับซ้อนของวัตถุ และค่าใช้จ่ายของการสร้างใหม่เสมอ โปรดเลือกความชัดเจนและการทดสอบมากกว่าความสะอาดแบบรูปแบบ เมื่อต้องเริ่มสงสัยในองค์ประกอบ -- มันให้ตัวเลือกที่สะอาดที่สุด และต่อมาสามารถถูกแทนที่ด้วย Prototormormormorm หรือ conson หากมีใบรับรองที่มีประสิทธิภาพในการพิสูจน์

โดย การ เชี่ยวชาญ ใน รูป แบบ สาม อย่าง นี้ คุณ จะ เตรียม ตัว ด้วย เครื่อง มือ ที่ มี ประสิทธิภาพ สําหรับ การ สร้าง ซอฟต์แวร์ ทาง วิศวกรรม ที่ ยืดหยุ่น และ ยืดหยุ่น ได้.