دوره مفاهیم شی گرایی (فصل 3 - جلسه 3) : الگوی طراحی Factory (فکتوری)

دسته بندی: آموزش
زمان مطالعه: 1 دقیقه
۰۹ مهر ۱۳۹۷

در ادامه آموزش الگوهای طراحی امروز در مورد الگوی طراحی Factory صحبت می کنیم. باید بدونید که ساختن اشیاء در برنامه نویسی شی گرا هم ممکنه هزینه بر و دردسر ساز باشه. الگوی طراحی فکتوری کمک می کنه این مورد رو حل کنیم :

:: توجه

این مطلب یک جلسه از دوره مفاهیم شی گرایی می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در دوره مفاهیم شی گرایی

چه امتیازی به این مقاله می دید؟
نویسنده لقمان آوند
بیش از 15 سال هست که برنامه نویسی می کنم و از بین همه زبون هایی که کار کردم جاوا، اسمبلی و php رو دوست دارم. دانشجوی دکترای نرم افزارم و توی دانشگاه روی پردازش بیگ دیتا و پردازش موازی کار کردم و عاشق چالش از هر نوعیش هستم! سون لرن مثل بچه منه که 12 سال براش وقت گذاشتم، اینجا همه تلاش می کنیم از شروع یادگیری تا ورود به بازر کار حوزه برنامه نویسی و IT همراهتون باشیم.

جلسات دوره

نظرات کاربران

amir rahimi morad

سلام. فرمودید یکی از مزایا این است که اگر مثلا در class خود نام یک Method را عوض کنیم لازم نیست دیگر در تمام جاهایی که این متد را فراخوانی کرده ایم تغییر دهیم و فقط کافیست در همان قسمت build این تغییر را اعمال کنیم . متوجه منظورتون نشدم لطفا با مثال این مورد رو در صورت امکان بفرمایید مثلا نمونه کد زیر را در نظر بگیرید :

حالا چگونه باید getAuthor را در کلاس تغییر دهم مثلا بگذارم getAuthor1 ولی فراخوانی متد را تغییر ندهم و از طریق همان getAuthor متد جدید اجرا شود… هر کاری کردم نشد. لطفا راهنمایی کنید. ممنونم.

abstract class AbstractFactoryMethod {
	abstract static function makePHPBook( $param );
}


class SamsFactoryMethod extends AbstractFactoryMethod {
	private $context = "Sams";

	public static function makePHPBook( $param ) {
		$book = null;
		switch ( $param ) {
			case "us":
				$book = new SamsPHPBook;
				break;
			case "other":
				$book = new OReillyPHPBook;
				break;
			default:
				$book = new SamsPHPBook;
				break;
		}

		return $book;
	}
}

abstract class AbstractBook {
	protected $author;
	protected $title;
	abstract function getAuthor();
	abstract function getTitle();
}
abstract class AbstractPHPBook extends AbstractBook {
	private $subject = "PHP";
}

class SamsPHPBook extends AbstractPHPBook {

	function __construct() {
		//alternate randomly between 2 books
		mt_srand( (double) microtime() * 10000000 );
		$rand_num = mt_rand( 0, 1 );

		if ( 1 > $rand_num ) {
			$this->author = ‘George Schlossnagle’;
			$this->title  = ‘Advanced PHP Programming’;
		} else {
			$this->author = ‘Christian Wenz’;
			$this->title  = ‘PHP Phrasebook’;
		}
	}


	function getTitle() {
		echo $this->title;
	}

	function getAuthor() {
		echo $this->author;
	}
}


$phpUs = SamsFactoryMethod::makePHPBook( "us" );
echo $phpUs->getAuthor();
لقمان آوند

شما فرض کنید فکتوری ندارید و هزار جای برنامه new SamsPHPBook رو مستقیما استفاده کردید. الان قرار شده اسم کلاس بشه PHPBook . باید همه اون هزار جا رو عوض کنید.
ولی الان که فکتوری دارید اون هزار جا طبعتا از فکتوری SamsFactoryMethod::makePHPBook استفاده کردید. و الان که اسم کلاس عوض شده کافیه تو همون فکتوری اسم کلاس یا روش ساختن شی رو عوض کنید.

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.