คำถามติดแท็ก design-patterns

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

10
อินเทอร์เฟซ Marker ใน Java?
ฉันได้รับการสอนว่าอินเทอร์เฟซ Marker ใน Java เป็นอินเทอร์เฟซที่ว่างเปล่าและใช้เพื่อส่งสัญญาณไปยังคอมไพเลอร์หรือ JVM ว่าอ็อบเจ็กต์ของคลาสที่ใช้อินเทอร์เฟซนี้ต้องได้รับการปฏิบัติด้วยวิธีพิเศษเช่นการทำให้เป็นอนุกรมการโคลนเป็นต้น แต่เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้ว่าจริงๆแล้วมันไม่มีส่วนเกี่ยวข้องกับคอมไพเลอร์หรือ JVM ยกตัวอย่างเช่นในกรณีของSerializableอินเตอร์เฟซที่วิธีการwriteObject(Object)ของObjectOutputStreamไม่บางอย่างเช่นinstanceOf Serializableการตรวจสอบว่าระดับการดำเนินการSerializableและพ่นNotSerializableExceptionตาม ทุกอย่างได้รับการจัดการในโค้ดและดูเหมือนว่าจะเป็นรูปแบบการออกแบบดังนั้นฉันคิดว่าเราสามารถกำหนดอินเทอร์เฟซเครื่องหมายของเราเองได้ ตอนนี้ข้อสงสัยของฉัน: คำจำกัดความของอินเทอร์เฟซเครื่องหมายที่กล่าวถึงข้างต้นในจุดที่ 1 ผิดหรือไม่? เราจะกำหนดอินเทอร์เฟซ Marker ได้อย่างไร? และแทนที่จะใช้ตัวinstanceOfดำเนินการทำไมเมธอดถึงไม่เป็นแบบwriteObject(Serializable)นั้นเพื่อให้มีการตรวจสอบประเภทเวลาคอมไพล์แทนรันไทม์? คำอธิบายประกอบดีกว่าอินเทอร์เฟซมาร์กเกอร์อย่างไร

7
การสร้างแบบจำลองลิฟต์โดยใช้การวิเคราะห์และออกแบบเชิงวัตถุ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบพร้อมข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ปรับปรุงคำถามนี้ มีชุดคำถามที่ดูเหมือนจะใช้กันทั่วไปในการสัมภาษณ์และชั้นเรียนเมื่อพูดถึงการออกแบบและวิเคราะห์เชิงวัตถุ นี่คือหนึ่งในนั้น น่าเสียดายที่อาจารย์ OOP ของฉันในวิทยาลัยไม่เคยให้คำตอบเลยฉันก็เลยสงสัย ปัญหามีดังนี้: ออกแบบชุดพื้นฐานของวัตถุ / วิธีการที่จะใช้ในการจำลองธนาคารลิฟต์ อะไรคือวัตถุและคุณลักษณะ / วิธีการ? เพื่อประโยชน์ในการโต้แย้งสมมติว่าอาคารของเรามียี่สิบชั้น ชั้นล่างสุดเป็นล็อบบี้และชั้นสองเชื่อมกับที่จอดรถ (ดังนั้นคนจะเข้า / ออกอาคารทั้งชั้นล่างสุดหรือชั้นสอง) มีลิฟต์ธนาคารหนึ่งแห่งที่ให้บริการทุกชั้น มีลิฟต์สามตัวในธนาคารลิฟต์และหนึ่งลิฟต์ต่อเพลา อะไรคือวิธีที่ถูกต้องในการสร้างแบบจำลองนี้ในแบบจำลองเชิงวัตถุ?

10
คลาสย่อยคลาส Java Builder
ให้บทความ Dr Dobbs นี้และรูปแบบตัวสร้างโดยเฉพาะเราจะจัดการกรณีของคลาสย่อยของ Builder ได้อย่างไร? การใช้ตัวอย่างแบบย่อส่วนที่เราต้องการให้คลาสย่อยเพิ่มการติดฉลากจีเอ็มโอการใช้งานที่ไร้เดียงสาจะเป็น: public class NutritionFacts { private final int calories; public static class Builder { private int calories = 0; public Builder() {} public Builder calories(int val) { calories = val; return this; } public NutritionFacts build() { return new NutritionFacts(this); } } protected NutritionFacts(Builder …

7
“ โปรแกรมไปยังอินเทอร์เฟซไม่ใช่การใช้งาน” หมายความว่าอย่างไร
มีคนหนึ่งสะดุดกับวลีนี้เมื่ออ่านเกี่ยวกับรูปแบบการออกแบบ แต่ฉันไม่เข้าใจมีใครช่วยอธิบายเรื่องนี้ให้ฉันได้ไหม


14
ทำไมเราถึงต้องการรูปแบบการออกแบบโรงงานที่เป็นนามธรรม?
คำจำกัดความส่วนใหญ่กล่าวว่า: โรงงานนามธรรมมีอินเทอร์เฟซสำหรับการสร้างตระกูลของวัตถุที่เกี่ยวข้องโดยไม่ระบุคลาสที่เป็นรูปธรรม การใช้ Abstract Factory Pattern คืออะไรในขณะที่เราสามารถบรรลุงานผ่านการสร้างวัตถุของคลาสคอนกรีตเอง เหตุใดเราจึงมีวิธีการโรงงานที่สร้างวัตถุของคลาสคอนกรีต? โปรดให้ตัวอย่างชีวิตจริงที่ฉันต้องใช้รูปแบบ abstractFactory?


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

4
ตัวอย่างข้อกังวลในการตัดข้าม
ตัวอย่างที่ดีของ a cross-cutting concernคืออะไร? ตัวอย่างเวชระเบียนในหน้าวิกิพีเดียดูเหมือนจะไม่สมบูรณ์สำหรับฉัน โดยเฉพาะจากตัวอย่างนี้เหตุใดการบันทึกจึงนำไปสู่การทำซ้ำรหัส ( การกระจาย ) (นอกเหนือจากการโทรธรรมดาเช่นlog("....")ทุกที่ซึ่งดูเหมือนจะไม่ใช่เรื่องใหญ่) อะไรคือความแตกต่างระหว่าง a core concernและ a cross-cutting concern? เป้าหมายสุดท้ายของฉันคือการทำความเข้าใจเกี่ยวกับ AOP ให้ดีขึ้น

5
รูปแบบการออกแบบและรูปแบบสถาปัตยกรรมแตกต่างกันอย่างไร?
เมื่อเราอ่านเกี่ยวกับรูปแบบการออกแบบบนอินเทอร์เน็ตเราทราบว่ามี 3 ประเภท: Creational โครงสร้าง เกี่ยวกับพฤติกรรม แต่เมื่อเราสร้างสถาปัตยกรรมของซอฟต์แวร์แล้วเราจะคิดถึง MVP, MVC หรือ MVVM ตัวอย่างเช่นในรูปแบบการสร้างสรรค์ฉันพบรูปแบบซิงเกิลตันแต่ฉันยังใช้ซิงเกิลตันใน MPV ด้วย คำถามของฉันคือรูปแบบการออกแบบเป็นโครงสร้างทั้งหมดของผลิตภัณฑ์หรือไม่? ถ้าใช่แล้วซิงเกิลตันจะเป็นรูปแบบการออกแบบได้อย่างไร? เพราะฉันสามารถใช้มันได้ทุกที่ในแอปพลิเคชันของฉัน โดยทั่วไปจะ จำกัด การสร้างครั้งละหนึ่งอินสแตนซ์ในหน่วยความจำเท่านั้น แต่แนวคิดนี้ไม่ได้กำหนดวิธีการออกแบบซอฟต์แวร์หรือไม่? ถ้าไม่เช่นนั้น MVP, MVC และ MVVM อยู่ที่ไหนในสามประเภทของรูปแบบ? และอะไรคือความแตกต่างระหว่างการออกแบบและสถาปัตยกรรมของซอฟต์แวร์?

19
มีรูปแบบการใช้งานเครื่องของรัฐโดยทั่วไปหรือไม่?
เราจำเป็นต้องใช้เครื่องของรัฐที่เรียบง่ายในC คำสั่งสวิตช์มาตรฐานเป็นวิธีที่ดีที่สุดหรือไม่? เรามีสถานะปัจจุบัน (สถานะ) และตัวกระตุ้นสำหรับการเปลี่ยนแปลง switch(state) { case STATE_1: state = DoState1(transition); break; case STATE_2: state = DoState2(transition); break; } ... DoState2(int transition) { // Do State Work ... if(transition == FROM_STATE_2) { // New state when doing STATE 2 -> STATE 2 } if(transition == FROM_STATE_1) { // New …

22
รูปแบบการออกแบบสำหรับ Undo Engine
ฉันกำลังเขียนเครื่องมือสร้างแบบจำลองโครงสร้างสำหรับแอปพลิเคชันวิศวกรรมโยธา ฉันมีคลาสโมเดลขนาดใหญ่หนึ่งคลาสที่แสดงถึงสิ่งปลูกสร้างทั้งหมดซึ่งรวมถึงคอลเลกชันของโหนดองค์ประกอบของเส้นการโหลด ฯลฯ ซึ่งเป็นคลาสที่กำหนดเองด้วย ฉันได้เขียนโค้ดโปรแกรมเลิกทำแล้วซึ่งจะบันทึกสำเนาลึกหลังจากการแก้ไขแต่ละครั้งในโมเดล ตอนนี้ฉันเริ่มคิดว่าฉันจะเขียนโค้ดให้ต่างออกไปได้ไหม แทนที่จะบันทึกสำเนาลึกฉันอาจบันทึกรายการของการดำเนินการของตัวปรับแต่งแต่ละรายการด้วยตัวปรับย้อนกลับที่เกี่ยวข้อง เพื่อให้ฉันสามารถใช้ตัวปรับย้อนกลับกับโมเดลปัจจุบันเพื่อเลิกทำหรือตัวปรับแต่งเพื่อทำซ้ำ ฉันนึกภาพออกว่าคุณจะใช้คำสั่งง่ายๆที่เปลี่ยนคุณสมบัติของวัตถุได้อย่างไร ฯลฯ แต่คำสั่งที่ซับซ้อนล่ะ เช่นเดียวกับการแทรกอ็อบเจ็กต์โหนดใหม่ลงในโมเดลและการเพิ่มอ็อบเจกต์บรรทัดที่คอยอ้างอิงไปยังโหนดใหม่ เราจะดำเนินการได้อย่างไร?

4
หลีกเลี่ยงคำสั่ง if ภายใน for loop หรือไม่?
ฉันมีคลาสที่เรียกWriterว่ามีฟังก์ชันwriteVectorดังนี้: void Drawer::writeVector(vector<T> vec, bool index=true) { for (unsigned int i = 0; i < vec.size(); i++) { if (index) { cout << i << "\t"; } cout << vec[i] << "\n"; } } ฉันพยายามไม่ให้มีรหัสซ้ำในขณะที่ยังคงกังวลเกี่ยวกับประสิทธิภาพ ในฟังก์ชั่นฉันทำการif (index)ตรวจสอบทุกรอบของfor-loop แม้ว่าผลลัพธ์จะเหมือนกันเสมอ ซึ่งถือเป็นการ "กังวลเกี่ยวกับประสิทธิภาพการทำงาน" ฉันสามารถหลีกเลี่ยงสิ่งนี้ได้อย่างง่ายดายโดยวางเช็คไว้ด้านนอกfor-loop ของฉัน อย่างไรก็ตามฉันจะได้รับรหัสซ้ำมากมาย: void Drawer::writeVector(...) { if (index) { for …

23
ฟังก์ชันใน JavaScript ที่สามารถเรียกใช้ได้เพียงครั้งเดียว
ฉันต้องการสร้างฟังก์ชันที่สามารถเรียกใช้งานได้เพียงครั้งเดียวในแต่ละครั้งหลังจากครั้งแรกจะไม่ถูกเรียกใช้งาน ฉันรู้จาก C ++ และ Java เกี่ยวกับตัวแปรคงที่สามารถทำงานได้ แต่ฉันอยากรู้ว่ามีวิธีที่หรูหรากว่านี้หรือไม่?

1
ความแตกต่างระหว่างโรงงานผู้ให้บริการและบริการ?
อะไรคือความแตกต่างระหว่างเงื่อนไขโรงงานผู้ให้บริการและบริการ? เพียงแค่เข้าสู่ NHibernate และรูปแบบพื้นที่เก็บข้อมูล (คลาส POCO ฯลฯ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.