Factory Method به شما کمک می کند تا با دانستن نوع شی، اشیاء جدیدی ایجاد کنید. کاربر ممکن است جزئیات نوع هر شی و جزئیات آن را نداند، اما Factory به کاربر کمک می کند تا یک نوع را انتخاب کند و نمونه سازی کند.
طبق DoFactory، Factory Method این است:
Creator FactoryMethod ما در اینجا است که اشیایی را با انواع تعریف شده ایجاد می کند.
AbstractProduct یک رابط است و رابطها پشتیبانی نمیشوند. بنابراین خارج از تصویر است.
محصولات اشیایی هستند که توسط FactoryMethod ایجاد می شوند.
روشهای Factory اغلب توسط بسیاری از اسکریپتهای جاوا اسکریپت استفاده میشوند. قدرت Factory Method از قابلیت توسعه آن ناشی میشود. به زودی نمونه آن را خواهیم دید، اما قبل از شروع کدنویسی، میخواهم یک مثال در دنیای واقعی برای Factory Methods ارائه دهم.
به یک شرکت فکر کنید. به کارمندانش فکر کنید. یک شرکت و کارمندانش نمونه خوبی برای Factory Method هستند.
هر فرد (ابجکت ایجاد شده از کلاس Company) یک شی است که با نوع خود ایجاد می شود. هر زمان که یک کار باید اختصاص داده شود یا به سادگی می خواهید چت کنید، به آن شخص می رسید یا برای آن شخص نامه می نویسید. شخص در اینجا یک نوع دارد و انجام می دهد. یک شغل خاص
![](https://www.c-sharpcorner.com/article/design-patterns-in-winjs-sharp4-factory-method/Images/Company.png)
شرکت در اینجا روش کارخانه ما است. این الگو کارکنان را با انواع کارهایی که انجام می دهند ایجاد می کند و کارهایی را برای تکمیل آنها تعیین می کند.
پیاده سازی
مثال ما صحیح و واضح است. ابتدا باید شرکت خود را ایجاد کنیم:
- var Company = WinJS.Class.define(
- function() {
- this.createEmployee = function (type) {
- var employee;
- if (type === "Developer") {
- employee = new Developer();
- } else if (type === "ProjectManager") {
- employee = new ProjectManager();
- } else if (type === "Designer") {
- employee = new Designer();
- } else if (type === "Analyst") {
- employee = new Analyst();
- }
- employee.type = type;
- employee.say = function () {
- Helper.Func.add(this.type + " earns " + this.hourly + " per hour");
- }
- return employee;
- }
- });
با توجه به کد بالا، وظایف را برای تکمیل با توجه به انواع ایجاد شده پس از فراخوانی تابع createEmployee تعریف می کنیم.
بیایید اکنون کارمندان خود را اضافه کنیم:
- var Developer = WinJS.Class.define(
- function () {
- this.hourly = "$20";
- });
- var ProjectManager = WinJS.Class.define(
- function () {
- this.hourly = "$25";
- });
- var Designer = WinJS.Class.define(
- function () {
- this.hourly = "$20";
- });
- var Analyst = WinJS.Class.define(
- function () {
- this.hourly = "$15";
- });
در اینجا کارمندانی هستند که مشاغل خاصی را تکمیل می کنند، شما می توانید آن را با توجه به نیاز خود گسترش دهید.
این نوع کارمندان دارای نام "ساعتی" هستند که پرداخت ساعتی آنها را مشخص می کند.
اکنون اجازه دهید کلاس Helper خود را ایجاد کنیم. کلاس کمکی ما هرگز در این سری ها تغییر نخواهد کرد:
- WinJS.Namespace.define("Helper");
- var log = "";
- Helper.Func =
- {
- add: function (msg) { log += msg + "\n"; },
- show: function () { console.log(log); log = ""; }
- };