سلام به همه دوستان
یک مثال از پلی مورفیسم آماده کردم که به درک بهتر این مبحث کمک میکنه.
برای شروع؛ یک بازی تفنگی رو در نظر بگیرین که یک سرباز و چندین اسلحه در این بازی داریم.
تمام اسلحهها باید بتونند شلیک کنند ولی روش انجام این کار متفاوت هستش.
( برای مثال بازی کلش آف کلنز رو در نظر بگیرید که کلی هیرو واسه حمله کردن داره مثل آرچر؛ بربر؛ دراگون و...
که همشون حمله میکنند ولی روش انجام این کار تو هرکدوم متفاوته )
خوب پس حالا که باید تمام اسلحهها شلیک کنند ولی روش انجام کار متفاوته بهترین کار اینه که از interface استفاده بشه.
interface gun {
public function fire();
}
خوب حالا که اینترفیس رو تعریف کردیم؛ باید بیایم اسلحه هارو بسازیم.
دوتا اسلحه M4 و shotgun داریم
class m4 implements gun{
public function fire(){
return "M4 - - - - - - - - - >>> ";
}
}
اسلحه شات گان
class shotgun implements gun{
public function fire(){
return "shotgun = = = = = = = = = = >>> ";
}
}
شاید سوال پیش بیاد چرا اینترفیس ؟؟؟؟ چرا از ارث بری استفاده نشده
جواب اینه که اگه به متد fireدر اسلحهها دقت کنید؛ کدهای متد fire در شات گان با m4 فرق داره.
پس این یعنی نمیشه یک بدنه مشترک برای هر 2 متد استفاده بشه
و در آخر کلاس سرباز رو میسازیم:
class soldier {
public function fireGun(gun $obj) {
echo $obj->fire();
}
}
و حالا تست برنامه:
$m4 = new m4();
$shotgun = new shotgun();
$soldier = new soldier();
$soldier->fireGun($shotgun);
حالا به راحتی میشه؛ هر اسلحه ای که میخوایم به سربازمون بدیم
و حتی فردا روز اگه اسحله جدید به بازی اضافه شد؛ خیلی راحت میشه بدون نقض کردن اصول solid ( قسمت O ) اینکار رو انجام داد.
مراقب سربازتون باشید :دی