ความเข้าใจผิดที่สำคัญในโลกการเข้ารหัสของวันนี้คือรูปแบบการสร้างบล็อค คุณใช้AbstractFactory
ที่นี่และที่Flyweight
นั่นและบางทีที่Singleton
นั่นและเชื่อมต่อพวกเขาเข้าด้วยกันด้วย XML และ presto คุณมีแอปพลิเคชันที่ใช้งานได้
พวกเขาไม่.
อืมมันไม่ใหญ่พอ
รูปแบบไม่ใช่การสร้างบล็อก
นั่นดีกว่า.
รูปแบบเป็นสิ่งที่คุณใช้เมื่อคุณพบว่าคุณมีปัญหา - คุณต้องมีความยืดหยุ่นที่รูปแบบมีให้หรือว่าคุณสะดุดเมื่อคุณทำภาษาเล็ก ๆ น้อย ๆ ในไฟล์ config และคุณพูดว่า "รอ เดี๋ยวก่อนหยุดนี่เป็นล่ามของตัวเองที่ฉันเขียน - นี่เป็นปัญหาที่รู้และแก้แล้วใช้รูปแบบของล่าม "
แต่โปรดสังเกตว่านั่นเป็นสิ่งที่คุณค้นพบในรหัสไม่ใช่สิ่งที่คุณเริ่มด้วย ผู้สร้างของ Java ไม่ได้พูด "โอ้เราจะใส่ฟลายเวทในจำนวนเต็ม" ในช่วงเริ่มต้น แต่ตระหนักถึงปัญหาประสิทธิภาพการทำงานที่สามารถแก้ไขได้โดยฟลายเวท
ดังนั้นจึงไม่มี "แผนภูมิการไหล" ที่คุณใช้เพื่อค้นหารูปแบบที่เหมาะสม รูปแบบเป็นวิธีการแก้ปัญหาเฉพาะของประเภทที่พบอีกครั้งและอีกครั้งและส่วนสำคัญของมันกลั่นเป็นรูปแบบ
การเริ่มต้นด้วยลวดลายเหมือนกับมีวิธีแก้ไขปัญหาและมองหาปัญหา นี่เป็นสิ่งที่ไม่ดี: มันนำไปสู่วิศวกรรมและความยืดหยุ่นในการออกแบบในที่สุด
ในขณะที่คุณกำลังเขียนรหัสเมื่อคุณรู้ว่าคุณกำลังเขียนโรงงานคุณสามารถพูดว่า "อ้าฮา! เป็นโรงงานที่ฉันจะเขียน" และใช้ความรู้ในการรู้รูปแบบของโรงงานเพื่อเขียนบิตถัดไปของ รหัสโดยไม่พยายามค้นพบรูปแบบจากโรงงานอีกครั้ง แต่คุณไม่ได้เริ่มต้นด้วย "ฉันมีเรียนที่นี่ฉันจะเขียนโรงงานเพื่อที่จะสามารถยืดหยุ่น" - เพราะมันจะไม่
นี่คือข้อความที่ตัดตอนมาจากการสัมภาษณ์กับ Erich Gamma (ของGamma, Helm, Johnson และ Vissides ): วิธีใช้รูปแบบการออกแบบ :
การพยายามใช้รูปแบบทั้งหมดเป็นสิ่งที่ไม่ดีเพราะคุณจะต้องจบลงด้วยการออกแบบสังเคราะห์ - การออกแบบแบบเก็งกำไรที่มีความยืดหยุ่นที่ไม่มีใครต้องการ ซอฟต์แวร์วันนี้ซับซ้อนเกินไป เราไม่สามารถที่จะคาดเดาสิ่งที่ควรทำ เราต้องให้ความสำคัญกับสิ่งที่ต้องการจริงๆ นั่นเป็นเหตุผลที่ฉันชอบการปรับโครงสร้างรูปแบบใหม่ ผู้คนควรเรียนรู้ว่าเมื่อพวกเขามีปัญหาหรือกลิ่นของรหัสชนิดใดชนิดหนึ่งในขณะที่ผู้คนเรียกมันว่าวันนี้พวกเขาสามารถไปที่กล่องเครื่องมือรูปแบบเพื่อค้นหาวิธีแก้ปัญหา
ความช่วยเหลือที่ดีที่สุดสำหรับ "สิ่งที่จะใช้เมื่อ" เป็นไปได้ว่าหน้า Wikipedia สำหรับรูปแบบการออกแบบซอฟต์แวร์ - ส่วน "การจำแนกและรายการ" อธิบายหมวดหมู่แต่ละรูปแบบที่อยู่ในและสิ่งที่มันทำ ไม่มีแผนผังลำดับงาน คำอธิบายอาจเป็นสิ่งที่ดีที่สุดที่คุณจะพบว่าเป็นตัวอย่างสั้น ๆ สำหรับ "สิ่งที่ควรใช้เมื่อใด"
โปรดทราบว่าคุณจะพบรูปแบบที่แตกต่างกันในส่วนต่าง ๆ ของการเขียนโปรแกรม การออกแบบเว็บมีรูปแบบของตัวเองในขณะที่ JEE (ไม่ใช่การออกแบบเว็บ) มีรูปแบบอื่น รูปแบบการเขียนโปรแกรมทางการเงินแตกต่างอย่างสิ้นเชิงกับรูปแบบการออกแบบ UI แอปพลิเคชันแบบสแตนด์อโลน
ดังนั้นความพยายามที่จะแสดงรายการทั้งหมดไม่สมบูรณ์โดยเนื้อแท้ หาวิธีคิดการใช้แล้วในที่สุดมันก็จะกลายเป็นลักษณะที่สองและคุณไม่จำเป็นต้องคิดเกี่ยวกับวิธีการใช้อีกครั้งหรือเมื่อใดอีกครั้ง (จนกว่าจะมีคนขอให้คุณอธิบาย)