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



visibility  
mode_comment   ۲

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

info توجه

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

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

comment دیدگاه کاربران
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 استفاده کردید. و الان که اسم کلاس عوض شده کافیه تو همون فکتوری اسم کلاس یا روش ساختن شی رو عوض کنید.

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.