12/08/2018, 17:06
Factory Method (Creational Patterns)
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) ... Các thành phần tham gia pattern này gồm có: Creator -- In sample code: ...
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)
...
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)
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 + " "; }, 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