Singletons เป็นเหมือนลัทธิคอมมิวนิสต์: ทั้งคู่ฟังดูดีบนกระดาษ แต่ระเบิดด้วยปัญหาในทางปฏิบัติ
รูปแบบซิงเกิลตันให้ความสำคัญกับความสะดวกในการเข้าถึงวัตถุอย่างไม่สมส่วน มันหลีกเลี่ยงบริบทโดยสิ้นเชิงโดยกำหนดให้ผู้บริโภคทุกคนใช้วัตถุที่กำหนดขอบเขต AppDomain โดยไม่เหลือตัวเลือกสำหรับการใช้งานที่แตกต่างกัน มันฝังความรู้โครงสร้างพื้นฐานไว้ในชั้นเรียนของคุณ (การเรียกร้องให้GetInstance()
) ในขณะที่เพิ่มพลังที่แสดงออกเป็นศูนย์ มันช่วยลดพลังในการแสดงออกของคุณได้จริง ๆ เพราะคุณไม่สามารถเปลี่ยนการนำไปใช้งานที่คลาสหนึ่งใช้โดยไม่ต้องเปลี่ยนทั้งหมดของพวกเขา คุณไม่สามารถเพิ่มฟังก์ชันการทำงานแบบครั้งเดียวได้
นอกจากนี้เมื่อระดับFoo
ขึ้นอยู่กับLogger.GetInstance()
, Foo
มีประสิทธิภาพซ่อนตัวอยู่พึ่งพาจากผู้บริโภค ซึ่งหมายความว่าคุณไม่สามารถเข้าใจหรือใช้ด้วยความมั่นใจจนกว่าคุณจะอ่านแหล่งที่มาและค้นพบความจริงที่ว่ามันขึ้นอยู่กับFoo
Logger
หากคุณไม่มีแหล่งที่มานั่นจะ จำกัด ว่าคุณจะเข้าใจและใช้โค้ดที่คุณพึ่งพาได้ดีเพียงใด
รูปแบบซิงเกิลตันตามที่ใช้กับคุณสมบัติ / วิธีการคงที่เป็นเพียงการแฮ็กเล็กน้อยเกี่ยวกับการใช้โครงสร้างพื้นฐาน มัน จำกัด คุณในรูปแบบมากมายในขณะที่ไม่มีประโยชน์เหนือทางเลือกอื่น คุณสามารถใช้ได้ตามที่คุณต้องการ แต่เนื่องจากมีทางเลือกอื่นที่ใช้งานได้ซึ่งส่งเสริมการออกแบบที่ดีกว่าจึงไม่ควรเป็นแนวทางปฏิบัติที่แนะนำ