# تا حد ممکن از Singleton Pattern استفاده نکنید

نیاز به توضیح نیست که Singleton Pattern مشکل‌گشای بسیاری از مشکلات شما در حین کدنویسی است؛ درواقع، زمانی که شما مطمئن باشید که فقط و فقط یک آبجکت از روی کلاس مدنظرتان نیاز خواهید داشت، می‌بایست از این الگو استفاده کنید اما این در حالی است که این تضمین باید وجود داشته باشد تا قبل از آنکه آن آبجکت مورد استفاده قرار گیرد، اصطلاحاً Initialize شده باشد.

اما تجربه نشان داده است که این نوع دیزاین پترن (الگوی طراحی) بیش از آنکه مفید واقع گردد، باعث دردسر خواهد شد چراکه توسعهٔ کد در آینده را دچار مشکل می‌کند!

یکی از دلایلی که دولوپرها به سمت استفاده از این الگوی طراحی می‌روند این است که در ابتدا فکر می‌کنند که مثلاً به کلاس X در کل پروژه صرفاً یک بار نیاز خواهند داشت اما این در حالی است که معمولاً پروژه‌های بزرگ نرم‌افزاری در طول زمان دستخوش تغییرات بسیاری شده و به مرور زمان نیازها دچار تغییر و تحول می‌گردند و چنانچه دولوپری بیش از حد روی این الگو حساب کرده باشد، ممکن است در آینده با مشکلات عدیده‌ای مواجه گردد.

نکتهٔ دیگری که در ارتباط با الگوی طراحی سینگلتون وجود دارد این است که این الگو دیپندنسی‌هایی (Dependency یا وابستگی) میان ماژول‌های مختلف پروژه‌ٔ شما به صورت انتزاعی ایجاد می‌کند و همین مسأله مشکل‌زا خواهد شد چرا که از یک سو این وابستگی‌ها خیلی به‌وضوح قابل مشاهده نیستند و از سوی دیگر بخش‌های مختلف سورس‌کد را به یکدیگر وابسته می‌سازند و همین مسأله منجر به این خواهد گشت که در آینده به‌سادگی نتوانیم از سورس‌کد خود در سایر پروژه‌ها استفاده کنیم.

چنین وابستگی‌هایی همچنین منجر به این خواهند شد که تست کردن نرم‌افزار با Unit Test که نیازمند وابستگی حداقلی مابین اجزای مختلف سورس‌کد است هم با مشکل مواجه شود.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/fa/thing_73.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
