รูปแบบการออกแบบ Python
ภาพรวม
การพัฒนาซอฟต์แวร์สมัยใหม่จำเป็นต้องตอบสนองความต้องการทางธุรกิจที่ซับซ้อน นอกจากนี้ยังต้องคำนึงถึงปัจจัยต่างๆเช่นความสามารถในการขยายและการบำรุงรักษาในอนาคต การออกแบบระบบซอฟต์แวร์ที่ดีมีความสำคัญต่อการบรรลุเป้าหมายเหล่านี้ รูปแบบการออกแบบมีบทบาทสำคัญในระบบดังกล่าว
เพื่อทำความเข้าใจรูปแบบการออกแบบลองพิจารณาตัวอย่างด้านล่าง -
การออกแบบของรถทุกคันเป็นไปตามรูปแบบการออกแบบพื้นฐานสี่ล้อพวงมาลัยระบบขับเคลื่อนหลักเช่นคันเร่งเบรกคลัตช์เป็นต้น
ดังนั้นทุกสิ่งที่สร้าง / ผลิตซ้ำ ๆ จะต้องเป็นไปตามรูปแบบในการออกแบบอย่างหลีกเลี่ยงไม่ได้ .. ไม่ว่าจะเป็นรถยนต์จักรยานพิซซ่าเครื่องเอทีเอ็มอะไรก็ตาม ... แม้แต่เตียงโซฟาของคุณ
การออกแบบที่เกือบจะกลายเป็นวิธีมาตรฐานในการเข้ารหัสตรรกะ / กลไก / เทคนิคบางอย่างในซอฟต์แวร์ดังนั้นจึงเป็นที่รู้จักหรือศึกษาในชื่อรูปแบบการออกแบบซอฟต์แวร์
เหตุใดรูปแบบการออกแบบจึงมีความสำคัญ
ประโยชน์ของการใช้รูปแบบการออกแบบคือ -
ช่วยคุณแก้ปัญหาการออกแบบทั่วไปผ่านแนวทางที่พิสูจน์แล้ว
ไม่มีความคลุมเครือในความเข้าใจเนื่องจากมีการบันทึกไว้เป็นอย่างดี
ลดเวลาในการพัฒนาโดยรวม
ช่วยให้คุณจัดการกับส่วนขยายและการปรับเปลี่ยนในอนาคตได้อย่างง่ายดายกว่าอย่างอื่น
อาจลดข้อผิดพลาดในระบบเนื่องจากเป็นวิธีแก้ปัญหาทั่วไปที่ได้รับการพิสูจน์แล้ว
การจำแนกรูปแบบการออกแบบ
รูปแบบการออกแบบ GoF (Gang of Four) แบ่งออกเป็นสามประเภท ได้แก่ การสร้างสรรค์โครงสร้างและพฤติกรรม
รูปแบบการสร้างสรรค์
รูปแบบการออกแบบสร้างสรรค์แยกตรรกะการสร้างวัตถุออกจากส่วนที่เหลือของระบบ แทนที่จะสร้างวัตถุรูปแบบการสร้างสรรค์จะสร้างสิ่งเหล่านี้ให้คุณแทน รูปแบบการสร้างสรรค์ ได้แก่ Abstract Factory, Builder, Factory Method, Prototype และ Singleton
Creational Patterns ไม่นิยมใช้ใน Python เนื่องจากลักษณะไดนามิกของภาษา นอกจากนี้ภาษายังช่วยให้เรามีความยืดหยุ่นในการสร้างสรรค์ในรูปแบบที่หรูหราเพียงพอเราแทบไม่จำเป็นต้องนำสิ่งใดมาใช้เช่น Singleton หรือ Factory
นอกจากนี้รูปแบบเหล่านี้ยังเป็นวิธีสร้างวัตถุในขณะที่ซ่อนตรรกะการสร้างแทนที่จะสร้างอินสแตนซ์วัตถุโดยตรงโดยใช้ตัวดำเนินการใหม่
รูปแบบโครงสร้าง
บางครั้งแทนที่จะเริ่มต้นใหม่คุณต้องสร้างโครงสร้างที่ใหญ่ขึ้นโดยใช้ชุดคลาสที่มีอยู่ นั่นคือจุดที่รูปแบบคลาสโครงสร้างใช้การสืบทอดเพื่อสร้างโครงสร้างใหม่ รูปแบบวัตถุโครงสร้างใช้องค์ประกอบ / การรวมเพื่อให้ได้ฟังก์ชันใหม่ Adapter, Bridge, Composite, Decorator, Façade, Flyweight และ Proxy เป็นรูปแบบโครงสร้าง พวกเขาเสนอวิธีที่ดีที่สุดในการจัดลำดับชั้นของชั้นเรียน
รูปแบบพฤติกรรม
รูปแบบพฤติกรรมเป็นวิธีที่ดีที่สุดในการจัดการการสื่อสารระหว่างวัตถุ รูปแบบอยู่ภายใต้หมวดหมู่นี้ ได้แก่ Visitor, Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy และ Template method คือ Behavioral Patterns
เนื่องจากแสดงถึงลักษณะการทำงานของระบบจึงมักใช้เพื่ออธิบายการทำงานของระบบซอฟต์แวร์
รูปแบบการออกแบบที่ใช้กันทั่วไป
ซิงเกิลตัน
เป็นหนึ่งในรูปแบบการออกแบบที่ถกเถียงกันและมีชื่อเสียงมากที่สุด ใช้ในภาษาเชิงวัตถุมากเกินไปและเป็นส่วนสำคัญของการเขียนโปรแกรมเชิงวัตถุแบบดั้งเดิม
รูปแบบ Singleton ใช้สำหรับ
เมื่อต้องดำเนินการบันทึก อินสแตนซ์คนตัดไม้ถูกแชร์โดยส่วนประกอบทั้งหมดของระบบ
ไฟล์คอนฟิกูเรชันกำลังใช้สิ่งนี้เนื่องจากแคชของข้อมูลจำเป็นต้องได้รับการดูแลและแชร์โดยส่วนประกอบต่างๆทั้งหมดในระบบ
การจัดการการเชื่อมต่อกับฐานข้อมูล
นี่คือแผนภาพ UML
class Logger(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_logger'):
cls._logger = super(Logger, cls).__new__(cls, *args, **kwargs)
return cls._logger
ในตัวอย่างนี้ Logger คือ Singleton
เมื่อ __new__ ถูกเรียกโดยปกติจะสร้างอินสแตนซ์ใหม่ของคลาสนั้น เมื่อเราลบล้างขั้นแรกเราจะตรวจสอบก่อนว่าอินสแตนซ์ซิงเกิลตันของเราถูกสร้างขึ้นหรือไม่ ถ้าไม่เราสร้างขึ้นโดยใช้ super call ดังนั้นเมื่อใดก็ตามที่เราเรียกตัวสร้างบน Logger เราจะได้อินสแตนซ์เดียวกันเสมอ
>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>