รูปแบบการออกแบบ 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>