คำถามติดแท็ก singleton

รูปแบบการออกแบบที่ทำให้มั่นใจได้ว่าอินสแตนซ์ทั้งแอปพลิเคชันของคลาสเฉพาะนั้นมีอยู่จริง หนึ่งในรูปแบบการออกแบบที่สร้างสรรค์ของ Gang of Four

30
อะไรคือสิ่งที่ไม่ดีเกี่ยวกับซิงเกิลตัน? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว รูปแบบเดี่ยวเป็นสมาชิกชำระเต็มของGoF 's หนังสือรูปแบบแต่มันดูเหมือนว่าเมื่อเร็ว ๆ นี้ค่อนข้างกำพร้าโลกนักพัฒนา ฉันยังคงใช้ singletons ค่อนข้างมากโดยเฉพาะอย่างยิ่งสำหรับคลาสโรงงานและในขณะที่คุณต้องระวังเล็กน้อยเกี่ยวกับปัญหามัลติเธรด Stack Overflow โดยเฉพาะดูเหมือนว่าจะถือว่าทุกคนยอมรับว่าซิงเกิลตันนั้นชั่วร้าย ทำไม? โปรดสนับสนุนคำตอบของคุณด้วย " ข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญเฉพาะด้าน "

30
ความแตกต่างระหว่างรูปแบบคงที่และรูปแบบซิงเกิล?
อะไรคือความแตกต่างที่แท้จริง (เช่นในทางปฏิบัติ) ที่มีอยู่ระหว่างคลาสแบบสแตติกและรูปแบบซิงเกิล? ทั้งสองสามารถถูกเรียกใช้โดยไม่มีการสร้างอินสแตนซ์ทั้งสองมีเพียง "อินสแตนซ์" หนึ่งรายการเท่านั้นและทั้งคู่ไม่มีความปลอดภัยต่อเธรด มีความแตกต่างอื่น ๆ อีกไหม?

22
สร้างซิงเกิลตันใน Python
คำถามนี้ไม่ได้มีไว้สำหรับการอภิปรายว่ารูปแบบการออกแบบซิงเกิลตันนั้นน่าพึงพอใจหรือไม่นั้นเป็นรูปแบบการต่อต้านหรือสงครามทางศาสนาใด ๆ แต่เพื่อพูดคุยว่ารูปแบบการใช้งานที่ดีที่สุดในไพ ธ อนนั้นเป็นไปได้อย่างไร ในกรณีนี้ฉันกำหนด 'pythonic ส่วนใหญ่จะหมายถึงว่ามันเป็นไปตามหลักการน้อยมหัศจรรย์' ฉันมีหลายชั้นเรียนซึ่งจะกลายเป็น singletons (กรณีใช้งานของฉันสำหรับคนตัดไม้ แต่นี่ไม่ใช่สิ่งสำคัญ) ฉันไม่ต้องการที่จะถ่วงเวลาเรียนหลายครั้งพร้อมกับเพิ่มชัยชนะเมื่อฉันสามารถสืบทอดหรือตกแต่ง วิธีการที่ดีที่สุด: วิธีที่ 1: มัณฑนากร def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass ข้อดี มัณฑนากรเป็นสารเติมแต่งในลักษณะที่มักใช้งานง่ายกว่าการสืบทอดหลายแบบ จุดด้อย ในขณะที่วัตถุที่สร้างขึ้นโดยใช้ MyClass () จะเป็นวัตถุซิงเกิลจริง MyClass …


29
วิธีที่มีประสิทธิภาพในการใช้รูปแบบซิงเกิลใน Java คืออะไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา วิธีที่มีประสิทธิภาพในการใช้รูปแบบซิงเกิลใน Java คืออะไร?

20
รูปแบบการออกแบบ C ++ Singleton
เมื่อเร็ว ๆ นี้ฉันได้พบกับการตระหนักถึง / การใช้รูปแบบการออกแบบซิงเกิลตันสำหรับ C ++ มันมีลักษณะเช่นนี้ (ฉันยอมรับมันจากตัวอย่างในชีวิตจริง): // a lot of methods are omitted here class Singleton { public: static Singleton* getInstance( ); ~Singleton( ); private: Singleton( ); static Singleton* instance; }; จากการประกาศนี้ฉันสามารถอนุมานได้ว่ามีการเริ่มต้นฟิลด์อินสแตนซ์บนฮีป นั่นหมายความว่ามีการจัดสรรหน่วยความจำ สิ่งที่ไม่ชัดเจนสำหรับฉันคือเมื่อหน่วยความจำจะถูกจัดสรรคืนหรือไม่ หรือมีข้อบกพร่องและหน่วยความจำรั่ว? ดูเหมือนว่ามีปัญหาในการใช้งาน คำถามหลักของฉันคือฉันจะใช้มันอย่างถูกวิธีได้อย่างไร

17
จะประกาศตัวแปรทั่วโลกใน Android ได้อย่างไร?
ฉันกำลังสร้างแอปพลิเคชันซึ่งต้องมีการเข้าสู่ระบบ ฉันสร้างกิจกรรมหลักและกิจกรรมเข้าสู่ระบบ ในonCreateวิธีกิจกรรมหลักฉันเพิ่มเงื่อนไขต่อไปนี้: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ... loadSettings(); if(strSessionString == null) { login(); } ... } onActivityResultวิธีการที่จะดำเนินการเมื่อฟอร์มการเข้าสู่ระบบยุติลักษณะเช่นนี้ @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch(requestCode) { case(SHOW_SUBACTICITY_LOGIN): { if(resultCode == Activity.RESULT_OK) { strSessionString = data.getStringExtra(Login.SESSIONSTRING); connectionAvailable = true; strUsername = …

29
ใช้แบบจำลอง dispatch_once ซิงเกิลตันใน Swift
ฉันกำลังพยายามหาโมเดลซิงเกิลที่เหมาะสมสำหรับการใช้งานใน Swift จนถึงตอนนี้ฉันสามารถรับแบบจำลองความปลอดภัยที่ไม่มีเธรดทำงานเป็น: class var sharedInstance: TPScopeManager { get { struct Static { static var instance: TPScopeManager? = nil } if !Static.instance { Static.instance = TPScopeManager() } return Static.instance! } } การตัดอินสแตนซ์ซิงเกิลตันในโครงสร้างแบบคงที่ควรอนุญาตอินสแตนซ์เดี่ยวที่ไม่ขัดแย้งกับอินสแตนซ์ซิงเกิลโดยไม่มีแผนการตั้งชื่อที่ซับซ้อนและควรทำให้สิ่งต่างๆเป็นส่วนตัวอย่างเป็นธรรม แน่นอนว่ารุ่นนี้ไม่ปลอดภัยสำหรับเธรด ดังนั้นฉันจึงพยายามที่จะเพิ่มdispatch_onceสิ่งทั้งหมด: class var sharedInstance: TPScopeManager { get { struct Static { static var instance: TPScopeManager? = nil …

18
เกี่ยวกับรูปแบบการออกแบบ: เมื่อใดที่ฉันควรใช้ซิงเกิลตัน
ตัวแปรระดับโลกที่ได้รับเกียรติ - กลายเป็นระดับโลกที่รุ่งโรจน์ บางคนบอกว่าการออกแบบเชิงวัตถุแตก ให้ฉันสถานการณ์อื่น ๆ นอกเหนือจากคนตัดไม้เก่าที่ดีที่มันเหมาะสมที่จะใช้ซิงเกิล

10
บริบท Singletons vs. Application บริบทใน Android?
การเรียกคืนโพสต์นี้ระบุปัญหาต่าง ๆ ของการใช้ซิงเกิลตัน และได้เห็นตัวอย่างของแอปพลิเคชัน Android ที่ใช้รูปแบบซิงเกิลฉันสงสัยว่าควรใช้ Singletons แทนอินสแตนซ์เดี่ยวที่แชร์ผ่านสถานะแอปพลิเคชันทั่วโลก ผ่าน context.getApplication ()) กลไก / ข้อดีทั้งข้อเสีย / ข้อเสียอะไร? พูดตามตรงฉันคาดหวังคำตอบเดียวกันในรูปแบบซิงเกิลโพสต์นี้ด้วยแอปพลิเคชันเว็บไม่ใช่ความคิดที่ดี! แต่ใช้กับ Android ฉันถูกไหม? มีอะไรแตกต่างใน DalvikVM เป็นอย่างอื่น? แก้ไข: ฉันต้องการมีความคิดเห็นในหลาย ๆ ด้านที่เกี่ยวข้อง: การประสานข้อมูล สามารถนำมาใช้ การทดสอบ

10
สร้างซิงเกิลตันโดยใช้ dispatch_once ของ GCD ใน Objective-C
หากคุณสามารถกำหนดเป้าหมาย iOS 4.0 ขึ้นไป การใช้ GCD เป็นวิธีที่ดีที่สุดในการสร้างซิงเกิลตันใน Objective-C (ปลอดภัยไหม) + (instancetype)sharedInstance { static dispatch_once_t once; static id sharedInstance; dispatch_once(&once, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }

26
Singleton Objective-C ของฉันควรมีลักษณะอย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ วิธีการเข้าถึงเดี่ยวของฉันมักจะแตกต่างจาก: static MyClass *gInstance = NULL; + (MyClass *)instance { @synchronized(self) { if (gInstance == NULL) gInstance = [[self alloc] init]; } return(gInstance); } ฉันจะทำอะไรเพื่อปรับปรุงสิ่งนี้

2
เหตุใด Apple แนะนำให้ใช้ dispatch_once สำหรับการนำรูปแบบซิงเกิลไปใช้ภายใต้ ARC
อะไรคือเหตุผลที่แน่นอนสำหรับการใช้ dispatch_once ใน accessor อินสแตนซ์ที่แชร์ของ singleton ภายใต้ ARC + (MyClass *)sharedInstance { // Static local predicate must be initialized to 0 static MyClass *sharedInstance = nil; static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ sharedInstance = [[MyClass alloc] init]; // Do any other initialisation stuff here }); return sharedInstance; } มันเป็นความคิดที่ดีไหมหรือที่จะยกตัวอย่างซิงเกิลตันแบบอะซิงโครนัสในพื้นหลัง? …


24
ซิงเกิล: ควรใช้อย่างไร
แก้ไข: จากคำถามอื่นฉันให้คำตอบที่มีลิงก์ไปยังคำถาม / คำตอบมากมายเกี่ยวกับซิงเกิล: ข้อมูลเพิ่มเติมเกี่ยวกับซิงเกิลที่นี่: ดังนั้นฉันได้อ่านหัวข้อSingletons: การออกแบบที่ดีหรือไม้ยันรักแร้? และการโต้เถียงยังคงโกรธ ฉันเห็นว่า Singletons เป็นรูปแบบการออกแบบ (ดีและไม่ดี) ปัญหาของ Singleton ไม่ใช่รูปแบบ แต่เป็นเรื่องของผู้ใช้ (ขออภัยทุกคน) ทุกคนและพ่อของพวกเขาคิดว่าพวกเขาสามารถใช้งานได้อย่างถูกต้อง (และจากการสัมภาษณ์มากมายที่ฉันทำคนส่วนใหญ่ไม่สามารถทำได้) นอกจากนี้เนื่องจากทุกคนคิดว่าพวกเขาสามารถใช้ซิงเกิลตันที่ถูกต้องพวกเขาใช้รูปแบบและใช้ในสถานการณ์ที่ไม่เหมาะสม (แทนที่ตัวแปรทั่วโลกด้วย Singletons!) ดังนั้นคำถามหลักที่ต้องตอบคือ: เมื่อใดที่คุณควรใช้ซิงเกิลตัน คุณใช้งานซิงเกิลตันได้อย่างไร ความหวังของฉันสำหรับบทความนี้คือเราสามารถรวบรวมเข้าด้วยกันในที่เดียว (แทนที่จะต้อง google และค้นหาหลาย ๆ ไซต์) แหล่งที่เชื่อถือได้เมื่อ (และวิธี) ในการใช้ Singleton อย่างถูกต้อง ที่เหมาะสมก็จะเป็นรายการต่อต้านการใช้งานและการใช้งานที่ไม่ดีทั่วไปอธิบายว่าทำไมพวกเขาล้มเหลวในการทำงานและสำหรับการใช้งานที่ดีจุดอ่อนของพวกเขา เพื่อให้ลูกบอลกลิ้ง: ฉันจะจับมือและพูดว่านี่คือสิ่งที่ฉันใช้ แต่อาจมีปัญหา ฉันชอบ "Scott Myers" ในการจัดการเรื่องในหนังสือของเขา "Effective C ++" สถานการณ์ที่ดีสำหรับการใช้ซิงเกิลตัน (ไม่มาก): กรอบการบันทึก …

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