ชุดของรูปแบบการออกแบบและสำนวนใน Python
โปรดจำไว้ว่าแต่ละรูปแบบก็มีข้อดีของตัวเอง และคุณต้องใส่ใจมากขึ้นว่าทำไมคุณถึงเลือกรูปแบบบางอย่างมากกว่าที่จะนำไปใช้
รูปแบบการสร้างสรรค์ :
ลวดลาย | คำอธิบาย |
---|---|
abstract_factory | ใช้ฟังก์ชันทั่วไปกับโรงงานเฉพาะ |
บอร์ก | ซิงเกิลตันที่มีสถานะแชร์ระหว่างอินสแตนซ์ |
ผู้สร้าง | แทนที่จะใช้ตัวสร้างหลายตัว วัตถุตัวสร้างจะได้รับพารามิเตอร์และส่งกลับวัตถุที่สร้างขึ้น |
โรงงาน | มอบหมายฟังก์ชัน/วิธีการพิเศษเพื่อสร้างอินสแตนซ์ |
ขี้เกียจ_ประเมินผล | รูปแบบคุณสมบัติที่ได้รับการประเมินอย่างเกียจคร้านใน Python |
สระน้ำ | สร้างอินสแตนซ์ล่วงหน้าและดูแลรักษากลุ่มอินสแตนซ์ประเภทเดียวกัน |
ต้นแบบ | ใช้โรงงานและโคลนต้นแบบสำหรับอินสแตนซ์ใหม่ (หากอินสแตนซ์มีราคาแพง) |
รูปแบบโครงสร้าง :
ลวดลาย | คำอธิบาย |
---|---|
3 ชั้น | ข้อมูล<->ตรรกะทางธุรกิจ<->การแยกการนำเสนอ (ความสัมพันธ์ที่เข้มงวด) |
อะแดปเตอร์ | ปรับอินเทอร์เฟซหนึ่งไปอีกอินเทอร์เฟซหนึ่งโดยใช้รายการสีขาว |
สะพาน | คนกลางของผู้ให้บริการไคลเอ็นต์เพื่อลดการเปลี่ยนแปลงอินเทอร์เฟซ |
คอมโพสิต | ช่วยให้ลูกค้าสามารถปฏิบัติต่อวัตถุและองค์ประกอบแต่ละรายการได้อย่างสม่ำเสมอ |
มัณฑนากร | รวมฟังก์ชันการทำงานเข้ากับฟังก์ชันอื่นเพื่อส่งผลต่อเอาต์พุต |
ซุ้ม | ใช้คลาสหนึ่งเป็น API กับคลาสอื่นจำนวนหนึ่ง |
ฟลายเวท | นำอินสแตนซ์ของวัตถุที่มีอยู่กลับมาใช้ใหม่อย่างโปร่งใสซึ่งมีสถานะคล้ายกัน/เหมือนกัน |
front_controller | คำขอตัวจัดการเดี่ยวที่มาถึงแอปพลิเคชัน |
เอ็มวีซี | model<->view<->controller (ความสัมพันธ์ที่ไม่เข้มงวด) |
พร็อกซี | วัตถุส่งการดำเนินการไปยังสิ่งอื่น |
รูปแบบพฤติกรรม :
ลวดลาย | คำอธิบาย |
---|---|
chain_of_responsibility | ใช้สายโซ่ของตัวจัดการต่อเนื่องเพื่อลองและประมวลผลข้อมูล |
แคตตาล็อก | วิธีการทั่วไปจะเรียกวิธีการพิเศษที่แตกต่างกันตามพารามิเตอร์การก่อสร้าง |
การผูกมัด_วิธีการ | โทรกลับวิธีวัตถุถัดไปต่อไป |
สั่งการ | รวมคำสั่งและอาร์กิวเมนต์เพื่อโทรในภายหลัง |
ตัววนซ้ำ | สำรวจคอนเทนเนอร์และเข้าถึงองค์ประกอบของคอนเทนเนอร์ |
ตัววนซ้ำ (alt. impl.) | สำรวจคอนเทนเนอร์และเข้าถึงองค์ประกอบของคอนเทนเนอร์ |
คนกลาง | วัตถุที่รู้วิธีการเชื่อมต่อวัตถุอื่นและทำหน้าที่เป็นพร็อกซี |
ของที่ระลึก | สร้างโทเค็นทึบแสงที่สามารถใช้เพื่อกลับไปยังสถานะก่อนหน้าได้ |
ผู้สังเกตการณ์ | ให้การโทรกลับเพื่อแจ้งเตือนเหตุการณ์/การเปลี่ยนแปลงข้อมูล |
เผยแพร่_สมัครสมาชิก | แหล่งที่มารวบรวมเหตุการณ์/ข้อมูลให้กับผู้ฟังที่ลงทะเบียนมากกว่า 0 คน |
รีจิสทรี | ติดตามคลาสย่อยทั้งหมดของคลาสที่กำหนด |
ข้อกำหนด | กฎเกณฑ์ทางธุรกิจสามารถรวมกันใหม่ได้โดยการผูกกฎเกณฑ์ทางธุรกิจไว้ด้วยกันโดยใช้ตรรกะบูลีน |
สถานะ | ตรรกะถูกจัดเป็นสถานะที่เป็นไปได้จำนวนแยกกันและสถานะถัดไปที่สามารถเปลี่ยนไปใช้ได้ |
กลยุทธ์ | การดำเนินการที่เลือกได้บนข้อมูลเดียวกัน |
แม่แบบ | วัตถุกำหนดโครงสร้าง แต่ใช้ส่วนประกอบที่เสียบได้ |
ผู้เยี่ยมชม | เรียกกลับสำหรับรายการทั้งหมดของคอลเลกชัน |
การออกแบบเพื่อรูปแบบการทดสอบ :
ลวดลาย | คำอธิบาย |
---|---|
การพึ่งพา_การฉีด | การฉีดพึ่งพา 3 แบบ |
รูปแบบพื้นฐาน :
ลวดลาย | คำอธิบาย |
---|---|
การมอบหมาย_รูปแบบ | วัตถุจัดการคำขอโดยการมอบหมายให้กับวัตถุที่สอง (ผู้รับมอบสิทธิ์) |
คนอื่น :
ลวดลาย | คำอธิบาย |
---|---|
กระดานดำ | แบบจำลองสถาปัตยกรรม รวบรวมความรู้ระบบย่อยต่าง ๆ เพื่อสร้างโซลูชัน แนวทาง AI - ไม่ใช่แก๊งค์สี่รูปแบบ |
กราฟ_ค้นหา | อัลกอริธึมการสร้างกราฟ - ไม่ใช่แก๊งสี่รูปแบบ |
อืม | เครื่องสถานะแบบลำดับชั้น - ไม่ใช่แก๊งสี่รูปแบบ |
รูปแบบการออกแบบใน Python โดย Peter Ullrich
Sebastian Buczyński - ทำไมคุณไม่ต้องการรูปแบบการออกแบบใน Python
คุณไม่ต้องการสิ่งนั้น!
Libs ที่เสียบได้ผ่านรูปแบบการออกแบบ
เมื่อมีการเพิ่มหรือแก้ไขการใช้งาน โปรดอ่านหลักเกณฑ์ต่อไปนี้:
เพิ่มคำอธิบายระดับโมดูลในรูปแบบของเอกสารพร้อมลิงก์ไปยังข้อมูลอ้างอิงที่เกี่ยวข้องหรือข้อมูลที่เป็นประโยชน์อื่นๆ
เพิ่มส่วน "ตัวอย่างในระบบนิเวศของ Python" หากคุณรู้บ้าง มันแสดงให้เห็นว่ารูปแบบสามารถนำไปใช้กับปัญหาในโลกแห่งความเป็นจริงได้อย่างไร
Facade.py มีตัวอย่างที่ดีของคำอธิบายโดยละเอียด แต่บางครั้งคำอธิบายที่สั้นกว่าใน template.py ก็เพียงพอแล้ว
หากต้องการดูรูปแบบบางเวอร์ชันที่เข้ากันได้กับ Python 2 โปรดตรวจสอบแท็กดั้งเดิม
เมื่อทำทุกอย่างเสร็จแล้ว - อัปเดตส่วนที่เกี่ยวข้องของ README
โปรดดำเนินการดังต่อไปนี้ก่อนส่งแพตช์
black .
สิ่งนี้จะทำให้โค้ดของคุณหลุดจากนั้นอย่างใดอย่างหนึ่ง:
tox
หรือ tox -e ci37
การดำเนินการนี้จะรันการทดสอบหน่วย ดู tox.ini สำหรับรายละเอียดเพิ่มเติม./lint.sh
สคริปต์นี้จะเป็นขุยและทดสอบโค้ดของคุณ สคริปต์นี้สะท้อนการดำเนินการไปป์ไลน์ CI คุณยังสามารถรันคำสั่ง flake8
หรือ pytest
ด้วยตนเองได้ ตัวอย่างสามารถพบได้ใน tox.ini
คุณสามารถคัดแยกปัญหาและดึงคำขอซึ่งอาจรวมถึงการสร้างรายงานข้อผิดพลาดหรือการขอข้อมูลสำคัญ เช่น หมายเลขเวอร์ชันหรือคำแนะนำในการทำซ้ำ หากคุณต้องการเริ่มปัญหาการแยกส่วน วิธีง่ายๆ วิธีหนึ่งในการเริ่มต้นคือการสมัครรับรูปแบบ Python บน CodeTriage
ผู้คนที่ Mutable.ai ได้สร้างผู้ช่วย AI ที่รับรู้โค้ดเบสแล้ว ลองดูสิ