الگوی طراحی factory
کتابخانه الکترونیکی دیتا ساینس
الگوی یا پترن factory، همانطور که از نامش مشخص هست، وظیفه ساخت یک شی براساس حالتهای مختلف را دارد. به عبارت دیگر در این طراحی شما متدی از یک کلاس را براساس یک آرگومان و یا مجموعهای از آرگومانها فراخوانی میکنید و متد مربوطه، براساس حالتهایی که ورودی دارد، اجراهای متفاوتی ممکن است، داشته باشد.
فرض کنید میخواهیم برنامهای برای فروش بلیط هواپیمای داخلی و خارجی، بنویسیم. کاربر با وارد کردن اطلاعات قصد دارد، تمامی پروازهای مربوط به مسیر را مشاهده نماید. در این شرایط بهتر است براساس طراحی factory، متدی را صدا بزنیم که براساس ورودیهای متفاوت تصمیم بگیرد که پرواز خارجی را نمایش دهید یا پرواز داخلی.
لاراول از این الگو برای نمایش صفحات استفاده میکند.
class PostsController { public function index() { $posts= Post::all(); return view('posts.index', ['posts' => $posts]); } }
/** * @return \Illuminate\View\View\Illuminate\Contracts\View\Factory * / function view($view = null, $data = [], $mergeData = []) { $factory = app(ViewFactory::class); if(func_num_args() === 0){ return $factory; } return $factory->make($view, $data, $mergeData); }
و درنهایت متد make در Factory فراخوانی میشود.
/** * Get the evaluated view contents for the given view. * * @param string $view * @param \Illuminate\Contracts\Support\Arrayable|array $data * @param array $mergeData * @return \Illuminate\Contracts\View\View */ public function make($view, $data = [], $mergeData = []);
منبع: https://codesource.io/brief-overview-of-design-pattern-used-in-laravel/