官术网_书友最值得收藏!

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 called make() that knows how to create objects of the car type
  • Specific car types such as CarFactory.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.

主站蜘蛛池模板: 湖北省| 津市市| 白城市| 射阳县| 罗源县| 灌云县| 青冈县| 万荣县| 怀仁县| 西宁市| 防城港市| 安徽省| 彰武县| 荃湾区| 安多县| 竹山县| 吉木萨尔县| 长春市| 同仁县| 崇仁县| 房产| 曲靖市| 安图县| 泸定县| 城市| 晋江市| 鹿邑县| 库尔勒市| 日照市| 榆林市| 嘉荫县| 县级市| 鹤庆县| 梧州市| 玛曲县| 泰来县| 土默特左旗| 汤阴县| 洱源县| 从江县| 泸西县|