
WEBVTT

00:00.140 --> 00:02.990
خوب، پس ما تزریق وابستگی سازنده را دیدیم.

00:02.990 --> 00:06.260
حالا بیایید به تزریق وابستگی setter نگاه کنیم.

00:06.260 --> 00:07.910
پس این چگونه متفاوت است؟

00:07.910 --> 00:14.240
خوب، نکته این است که برای انجام این کار، ما اکنون از ویژگی‌ها استفاده خواهیم کرد به جای آنچه که قبلاً انجام دادیم.

00:14.240 --> 00:19.460
پس به عنوان مثال، ما یک چکش ایجاد خواهیم کرد که ویژگی چکش خواهد بود.

00:19.460 --> 00:23.930
و سپس از یک ویژگی دیگر برای اره استفاده خواهیم کرد، خوب؟

00:23.930 --> 00:28.220
پس این یکی یک اره خواهد بود یا به آن اره می‌گوییم.

00:28.220 --> 00:32.210
در واقع باید ویژگی‌ها را با حرف بزرگ بنامیم.

00:32.210 --> 00:33.830
پس ما اکنون اره داریم.

00:33.830 --> 00:41.720
و حالا به جای اینکه سازنده از تزریق وابستگی سازنده استفاده کند، آنچه که ما استفاده خواهیم کرد، تزریق وابستگی setter است.

00:41.720 --> 00:42.650
پس setter D.

00:42.650 --> 00:49.310
پس در setter D ما حتی نیازی به فراخوانی سازنده نداریم.

00:49.310 --> 00:52.520
پس می‌توانیم یک سازنده پیش‌فرض داشته باشیم.

00:52.520 --> 00:53.060
خوب.

00:53.060 --> 00:55.490
ما نیازی به ایجاد یکی از خودمان نداریم.

00:55.490 --> 01:01.280
پس حتی اگر شما یک سازنده اضافه نکنید، یکی به طور پیش‌فرض ارائه می‌شود، همانطور که قبلاً دیدیم.

01:01.280 --> 01:05.090
و حالا می‌توانیم از سازنده استفاده کنیم.

01:05.090 --> 01:08.570
اما نباید چیزی به سازنده منتقل کنیم.

01:08.570 --> 01:10.640
پس این سازنده جدید هنوز هم کار خواهد کرد.

01:10.640 --> 01:16.010
فقط یک شیء سازنده خالی ایجاد می‌کند که ویژگی‌هایی دارد که هنوز تعیین نشده‌اند.

01:16.010 --> 01:16.400
درست است؟

01:16.400 --> 01:22.460
و این متدی دارد که می‌تواند فراخوانی شود، اما واقعاً آماده نیست زیرا نه چکش و نه اره تنظیم شده‌اند.

01:22.460 --> 01:23.450
آن‌ها در این مرحله خالی هستند، درست است؟

01:23.450 --> 01:33.470
پس این به این معناست که قبل از اینکه بتوانیم از اره و چکش استفاده کنیم، باید آن‌ها را به سازنده ارائه دهیم.

01:33.470 --> 01:35.360
پس ما یک سازنده ایجاد می‌کنیم.

01:35.360 --> 01:40.550
و قبل از اینکه بتوانیم این متد build house را فراخوانی کنیم، اگر آن را فراخوانی کنیم، باید یک خطا دریافت کنیم.

01:40.550 --> 01:43.250
اینجا می‌بینید که استثنای مرجع null است.

01:43.250 --> 01:51.830
پس مشکل اینجا این است که ما نه چکش و نه اره را به سازنده خود منتقل نمی‌کنیم، نه در طول سازنده و نه در طول setter.

01:51.830 --> 01:53.510
پس چگونه می‌توانیم این کار را انجام دهیم؟

01:53.510 --> 02:00.680
می‌توانیم فقط بگوییم builder.hammer قرار است چکشی باشد که ما قبلاً در این خط ایجاد کردیم.

02:00.680 --> 02:02.240
و حالا می‌توانیم همین کار را با builder.saw انجام دهیم و می‌توانیم اره را از این خط ارائه دهیم.

02:10.100 --> 02:15.290
و حالا در این مرحله می‌توانیم خانه را بسازیم، می‌توانیم کد خود را اجرا کنیم و می‌گوید چکش زدن میخ‌ها،

02:15.290 --> 02:17.330
اره کردن چوب، ساخت، خانه ساخته شد.

02:17.330 --> 02:26.390
پس آنچه که ما اینجا می‌بینیم، تزریق وابستگی setter است که در آن وابستگی‌ها را تنظیم می‌کنیم.

02:26.390 --> 02:31.670
پس وابستگی‌ها چکش و اره هستند و ما آن‌ها را در این دو خط تنظیم می‌کنیم.

02:31.940 --> 02:32.630
خوب.

02:32.630 --> 02:41.960
پس آنچه که ما اینجا انجام می‌دهیم این است که وابستگی‌ها را از طریق setterها تزریق می‌کنیم، خوب؟

02:41.960 --> 02:44.540
این در اینجا و همچنین در اینجا اتفاق می‌افتد.

02:44.540 --> 02:47.720
و در اینجا ما وابستگی‌ها را از خارج ایجاد می‌کنیم.

02:47.720 --> 02:48.470
خوب.

02:48.470 --> 02:53.150
پس نکته جالب این است که اکنون می‌توانند از خارج از کلاس تنظیم شوند.

02:53.150 --> 02:55.250
و این به ما انعطاف‌پذیری می‌دهد.

02:55.250 --> 03:03.320
پس وابستگی‌ها می‌توانند پس از ایجاد شیء سازنده تغییر کنند، در مثال قبلی ما که

03:03.320 --> 03:10.100
سازنده داشتیم، نمی‌توانستیم نوع چکش یا چکشی که استفاده می‌شود را تغییر دهیم.

03:10.100 --> 03:16.070
پس در مثال خاصی که اینجا داریم، واضح است که اره و چکش ثابت هستند.

03:16.070 --> 03:26.180
اما تصور کنید که می‌توانیم از چندشکلی استفاده کنیم که در آن به عنوان مثال یک چکش لاستیکی را به ارث ببریم که همچنین یک چکش است.

03:26.180 --> 03:28.760
پس این قابلیت‌های مشابهی به عنوان یک چکش دارد.

03:28.760 --> 03:34.940
اما علاوه بر آن، یک چکش لاستیکی می‌تواند برای کارهای دیگری نیز استفاده شود، مانند قرار دادن، من حتی نمی‌دانم

03:34.940 --> 03:39.050
کلمه انگلیسی آن چیست، اما مانند یک چکش دیگر قابلیت‌های دیگری دارد.

03:39.050 --> 03:45.170
و علاوه بر چکش پیش‌فرض، یا مانند یک اره برقی که قوی‌تر از یک اره دستی است، بگذارید بگوییم.

03:45.170 --> 03:51.290
پس می‌توانیم اره‌ای داشته باشیم که از اره به ارث می‌برد، اما سپس بهتر است زیرا مهارت‌های اضافی دارد.

03:51.290 --> 03:57.980
و سپس می‌توانیم بگوییم، خوب، ما شروع به دادن چکش پیش‌فرض و اره پیش‌فرض به سازنده می‌کنیم،

03:57.980 --> 04:01.040
اما در واقع بعداً آن‌ها را بازنویسی خواهیم کرد.

04:01.040 --> 04:09.080
پس شما می‌توانید واضح است که تزریق وابستگی سازنده را با تزریق وابستگی setter ترکیب کنید.

04:09.080 --> 04:11.570
پس با تزریق وابستگی setter.

04:11.570 --> 04:12.170
خوب.

04:12.170 --> 04:14.300
پس این برای این یکی کافی است.

04:14.300 --> 04:18.410
و در ویدیو بعدی به تزریق وابستگی رابط خواهیم پرداخت.

04:18.410 --> 04:19.730
پس در آنجا می‌بینیم.
```
