Factory Method (Creational Patterns)
Bài đăng này đã không được cập nhật trong 6 năm
Definition
Khai báo 1 interface để tạo 1 object, nhưng sẽ để những class con xác định class để khởi tạo. Factory Method cho phép 1 class chuyển class để khởi tạo.
Tần suất sử dụng trong JavaScript: 4/5 (medium high)
Summary
...
Diagram
Participants
Các thành phần tham gia pattern này gồm có:
- Creator -- In sample code: Factory
- 'factory' object để tạo nhiều product
- chạy 'factoryMethod' sẽ trả về các product được tạo mới
- AbstractProduct -- not used in JavaScript
- khởi tạo 1 interface cho product
- ConcreteProduct -- In sample code: Employees
- product sẽ được khởi tạo
- tất cả product sẽ hỗ trợ 1 interface giống nhau (properties and methods)
Sample code in JavaScript
function Factory() {
this.createEmployee = function (type) {
var employee;
if (type === "fulltime") {
employee = new FullTime();
} else if (type === "parttime") {
employee = new PartTime();
} else if (type === "temporary") {
employee = new Temporary();
} else if (type === "contractor") {
employee = new Contractor();
}
employee.type = type;
employee.say = function () {
log.add(this.type + ": rate " + this.hourly + "/hour");
}
return employee;
}
}
var FullTime = function () {
this.hourly = "$12";
};
var PartTime = function () {
this.hourly = "$11";
};
var Temporary = function () {
this.hourly = "$10";
};
var Contractor = function () {
this.hourly = "$15";
};
// log helper
var log = (function () {
var log = "";
return {
add: function (msg) { log += msg + "\n"; },
show: function () { alert(log); log = ""; }
}
})();
function run() {
var employees = [];
var factory = new Factory();
employees.push(factory.createEmployee("fulltime"));
employees.push(factory.createEmployee("parttime"));
employees.push(factory.createEmployee("temporary"));
employees.push(factory.createEmployee("contractor"));
for (var i = 0, len = employees.length; i < len; i++) {
employees[i].say();
}
log.show();
}
http://www.dofactory.com/javascript/factory-method-design-pattern
All rights reserved