- JavaScript:Moving to ES2015
- Ved Antani Simon Timms Narayan Prusty
- 356字
- 2021-07-09 19:07:38
The factory pattern
The factory pattern is another popular object creation pattern. It does not require the usage of constructors. This pattern provides an interface to create objects. Based on the type passed to the factory, that particular type of object is created by the factory. A common implementation of this pattern is usually using a class or static method of a class. The purposes of such a class or method are as follows:
- It abstracts out repetitive operations when creating similar objects
- It allows the consumers of the factory to create objects without knowing the internals of the object creation
Let's take a common example to understand the usage of a factory. Let's say that we have the following:
- A constructor,
CarFactory()
- A static method in
CarFactory
calledmake()
that knows how to create objects of thecar
type - Specific
car
types such asCarFactory.SUV
,CarFactory.Sedan
, and so on
We want to use CarFactory
as follows:
var golf = CarFactory.make('Compact'); var vento = CarFactory.make('Sedan'); var touareg = CarFactory.make('SUV');
Here is how you would implement such a factory. The following implementation is fairly standard. We are programmatically calling the constructor function that creates an object of the specified type—CarFactory[const].prototype = new CarFactory();
.
We are mapping object types to the constructors. There can be variations in how you can go about implementing this pattern:
// Factory Constructor function CarFactory() {} CarFactory.prototype.info = function() { console.log("This car has "+this.doors+" doors and a "+this.engine_capacity+" liter engine"); }; // the static factory method CarFactory.make = function (type) { var constr = type; var car; CarFactory[constr].prototype = new CarFactory(); // create a new instance car = new CarFactory[constr](); return car; }; CarFactory.Compact = function () { this.doors = 4; this.engine_capacity = 2; }; CarFactory.Sedan = function () { this.doors = 2; this.engine_capacity = 2; }; CarFactory.SUV = function () { this.doors = 4; this.engine_capacity = 6; }; var golf = CarFactory.make('Compact'); var vento = CarFactory.make('Sedan'); var touareg = CarFactory.make('SUV'); golf.info(); //"This car has 4 doors and a 2 liter engine"
We suggest that you try this example in JS Bin and understand the concept by actually writing its code.
- JavaScript前端開發(fā)模塊化教程
- 造個(gè)小程序:與微信一起干件正經(jīng)事兒
- JMeter 性能測試實(shí)戰(zhàn)(第2版)
- Java編程指南:基礎(chǔ)知識(shí)、類庫應(yīng)用及案例設(shè)計(jì)
- Troubleshooting PostgreSQL
- Hands-On GPU:Accelerated Computer Vision with OpenCV and CUDA
- Mastering Google App Engine
- 微信小程序項(xiàng)目開發(fā)實(shí)戰(zhàn)
- 基于ARM Cortex-M4F內(nèi)核的MSP432 MCU開發(fā)實(shí)踐
- Orleans:構(gòu)建高性能分布式Actor服務(wù)
- Buildbox 2.x Game Development
- Practical GIS
- Python程序設(shè)計(jì)教程
- Beginning PHP
- Getting Started with the Lazarus IDE