ฉันรู้สึกว่าคำตอบอื่น ๆ ของฉันหมายถึงกรณีทั่วไป แต่ OP แสดงความคิดเห็นขอเฉพาะ (ดังนั้นฉันรู้สึกว่ามันสมควรได้รับคำตอบแยกต่างหาก) น่าเศร้าที่ฉันไม่คุ้นเคยกับรูปแบบของที่เก็บ แต่ฉันจะเอาไปแทงที่อื่น ตามกฎแล้วฉันคิดว่าวิธีที่ดีที่สุดในการอธิบายสิ่งเหล่านี้คือผ่านปัญหาที่คุณต้องการแก้ไขสาเหตุที่คุณต้องการแก้ปัญหาและวิธีทำให้ปัญหาสำเร็จ
ซิงเกิล
รูปแบบนี้ใช้เมื่อเราต้องการรับประกันว่ามีเพียงสิ่งเดียวเท่านั้น รูปแบบสามารถทำได้โดยการป้องกันไม่ให้ผู้อื่นสร้างวัตถุของเรา
วิกิพีเดีย
MVC
รูปแบบนี้ใช้เพื่อช่วยรักษาสิ่งต่าง ๆ แบบแยกส่วนพร้อมประโยชน์ทั้งหมดที่มาพร้อมกับสิ่งนั้น มุมมองคือ "ส่วนต่อประสานผู้ใช้" รุ่นคือข้อมูล (รวมถึงตรรกะทางธุรกิจ) และตัวควบคุมเป็นวิธีที่การกระทำของผู้ใช้จัดการกับแบบจำลอง ด้วยโมดูลย่อยนี้ไม่มีอะไรทำให้ฉันหยุดไม่ให้มีมุมมอง / ตัวควบคุมหลายตัวทำงานกับโมเดลเดียวกัน สำหรับตัวอย่างที่เรียบง่ายเกินไปฉันสามารถโต้ตอบกับอีเมลของฉัน ("รุ่น") ผ่านเว็บไซต์แอปพลิเคชันเดสก์ท็อปและ iPhone ของฉัน ("มุมมอง + ตัวควบคุม") ถ้าฉันมีกล่องจดหมายกลุ่มที่ใช้ร่วมกันฉันสามารถสร้างตัวควบคุมที่จะไม่ส่งอีเมลและใช้มุมมองแอปพลิเคชันและอีเมลซ้ำ (ใช่ง่ายเกินไป แต่หวังว่าจะเข้าใจได้ :))
นอกจากนี้ด้วยการแยกความกังวลที่กำหนดไว้อย่างดีนี้การเปลี่ยนแปลงในหนึ่ง (นึกคิด) ไม่จำเป็นต้องมีการเปลี่ยนแปลงในอีก ตัวอย่างที่เป็นรูปธรรมถ้าฉันต้องการสนับสนุนการอ่าน / เขียนฐานข้อมูล MySQL แทนที่จะเป็นฐานข้อมูล Oracle ฉันจะต้องเปลี่ยนแบบจำลองของฉันเท่านั้นและมุมมอง / ตัวควบคุมของฉันจะไม่เปลี่ยนแปลง
วิกิพีเดีย
โรงงาน
ต้องระวังที่นี่เนื่องจากมีรูปแบบที่คล้ายกันหลายอย่างที่เรียกว่า Factory ... ฉันจะพูดถึงAbstract Factoryแต่คุณควรรู้ว่ายังมีรูปแบบวิธีการของโรงงานด้วยเช่นกัน
โดยพื้นฐานแล้วฉันจะใช้ Abstract Factory เมื่อฉันรู้ว่าขั้นตอนใดที่ฉันต้องการดำเนินการ แต่ขั้นตอนในการทำตามขั้นตอนเหล่านี้อาจแตกต่างกันไป ตัวอย่างเช่นฉันสามารถสร้างแอปพลิเคชันที่ฉันต้องการสร้างกล่องโต้ตอบด้วยปุ่มบน โดยการใช้รหัสของฉันใช้โรงงาน UI สมมุติถ้าฉันต้องการรหัสของฉันบน Mac หรือ Linux แทน Windows ฉันเพียงแค่ให้โรงงานที่แตกต่างกันและส่วนที่เหลือของรหัสของฉันไม่เปลี่ยนแปลง สำหรับตัวอย่างที่อาจเกิดขึ้นฉันอาจมีโรงงานเว็บและทันใดนั้นรหัสส่วนใหญ่ที่สนับสนุนแอปพลิเคชันเดสก์ท็อปของฉันก็เปิดใช้งานเว็บไซต์ที่สมบูรณ์แล้ว :) (ตกลงไม่ได้เพราะเหตุผลอื่น แต่ในทางทฤษฎี :))