خوب، پس ما تزریق وابستگی سازنده را دیدیم.
حالا بیایید به تزریق وابستگی setter نگاه کنیم.
پس این چگونه متفاوت است؟
خوب، نکته این است که برای انجام این کار، ما اکنون از ویژگی‌ها استفاده خواهیم کرد به جای آنچه که قبلاً انجام دادیم.
پس به عنوان مثال، ما یک چکش ایجاد خواهیم کرد که ویژگی چکش خواهد بود.
و سپس از یک ویژگی دیگر برای اره استفاده خواهیم کرد، خوب؟
پس این یکی یک اره خواهد بود یا به آن اره می‌گوییم.
در واقع باید ویژگی‌ها را با حرف بزرگ بنامیم.
پس ما اکنون اره داریم.
و حالا به جای اینکه سازنده از تزریق وابستگی سازنده استفاده کند، آنچه که ما استفاده خواهیم کرد، تزریق وابستگی setter است.
پس setter D.
پس در setter D ما حتی نیازی به فراخوانی سازنده نداریم.
پس می‌توانیم یک سازنده پیش‌فرض داشته باشیم.
خوب.
ما نیازی به ایجاد یکی از خودمان نداریم.
پس حتی اگر شما یک سازنده اضافه نکنید، یکی به طور پیش‌فرض ارائه می‌شود، همانطور که قبلاً دیدیم.
و حالا می‌توانیم از سازنده استفاده کنیم.
اما نباید چیزی به سازنده منتقل کنیم.
پس این سازنده جدید هنوز هم کار خواهد کرد.
فقط یک شیء سازنده خالی ایجاد می‌کند که ویژگی‌هایی دارد که هنوز تعیین نشده‌اند.
درست است؟
و این متدی دارد که می‌تواند فراخوانی شود، اما واقعاً آماده نیست زیرا نه چکش و نه اره تنظیم شده‌اند.
آن‌ها در این مرحله خالی هستند، درست است؟
پس این به این معناست که قبل از اینکه بتوانیم از اره و چکش استفاده کنیم، باید آن‌ها را به سازنده ارائه دهیم.
پس ما یک سازنده ایجاد می‌کنیم.
و قبل از اینکه بتوانیم این متد build house را فراخوانی کنیم، اگر آن را فراخوانی کنیم، باید یک خطا دریافت کنیم.
اینجا می‌بینید که استثنای مرجع null است.
پس مشکل اینجا این است که ما نه چکش و نه اره را به سازنده خود منتقل نمی‌کنیم، نه در طول سازنده و نه در طول setter.
پس چگونه می‌توانیم این کار را انجام دهیم؟
می‌توانیم فقط بگوییم builder.hammer قرار است چکشی باشد که ما قبلاً در این خط ایجاد کردیم.
و حالا می‌توانیم همین کار را با builder.saw انجام دهیم و می‌توانیم اره را از این خط ارائه دهیم.
و حالا در این مرحله می‌توانیم خانه را بسازیم، می‌توانیم کد خود را اجرا کنیم و می‌گوید چکش زدن میخ‌ها،
اره کردن چوب، ساخت، خانه ساخته شد.
پس آنچه که ما اینجا می‌بینیم، تزریق وابستگی setter است که در آن وابستگی‌ها را تنظیم می‌کنیم.
پس وابستگی‌ها چکش و اره هستند و ما آن‌ها را در این دو خط تنظیم می‌کنیم.
خوب.
پس آنچه که ما اینجا انجام می‌دهیم این است که وابستگی‌ها را از طریق setterها تزریق می‌کنیم، خوب؟
این در اینجا و همچنین در اینجا اتفاق می‌افتد.
و در اینجا ما وابستگی‌ها را از خارج ایجاد می‌کنیم.
خوب.
پس نکته جالب این است که اکنون می‌توانند از خارج از کلاس تنظیم شوند.
و این به ما انعطاف‌پذیری می‌دهد.
پس وابستگی‌ها می‌توانند پس از ایجاد شیء سازنده تغییر کنند، در مثال قبلی ما که
سازنده داشتیم، نمی‌توانستیم نوع چکش یا چکشی که استفاده می‌شود را تغییر دهیم.
پس در مثال خاصی که اینجا داریم، واضح است که اره و چکش ثابت هستند.
اما تصور کنید که می‌توانیم از چندشکلی استفاده کنیم که در آن به عنوان مثال یک چکش لاستیکی را به ارث ببریم که همچنین یک چکش است.
پس این قابلیت‌های مشابهی به عنوان یک چکش دارد.
اما علاوه بر آن، یک چکش لاستیکی می‌تواند برای کارهای دیگری نیز استفاده شود، مانند قرار دادن، من حتی نمی‌دانم
کلمه انگلیسی آن چیست، اما مانند یک چکش دیگر قابلیت‌های دیگری دارد.
و علاوه بر چکش پیش‌فرض، یا مانند یک اره برقی که قوی‌تر از یک اره دستی است، بگذارید بگوییم.
پس می‌توانیم اره‌ای داشته باشیم که از اره به ارث می‌برد، اما سپس بهتر است زیرا مهارت‌های اضافی دارد.
و سپس می‌توانیم بگوییم، خوب، ما شروع به دادن چکش پیش‌فرض و اره پیش‌فرض به سازنده می‌کنیم،
اما در واقع بعداً آن‌ها را بازنویسی خواهیم کرد.
پس شما می‌توانید واضح است که تزریق وابستگی سازنده را با تزریق وابستگی setter ترکیب کنید.
پس با تزریق وابستگی setter.
خوب.
پس این برای این یکی کافی است.
و در ویدیو بعدی به تزریق وابستگی رابط خواهیم پرداخت.
پس در آنجا می‌بینیم. ```