工厂模式也是对象创建模式之一,它通常在类或类的静态方法中去实现。构造对象的一种方式是使用new操作符,但使用new时正是针对实现编程,会造成“耦合”问题,与具体的类关系紧密。导致代码更脆弱,缺乏弹性,在复杂逻辑的项目中建议是面向接口编程。 先看简单工厂模式 复制代码 代码如下: Person(name, age) { var obj = {} obj.name = name obj.age = age return obj } var p1 = Person("jack", 25) var p2 = Person("lily", 22)
与构造函数方式写一个类的区别在于没有使用this,而是每次都构造一个空对象,然后给其添加属性。创建对象方式不是使用new,而是使用函数调用方式。这种方式基本上用来替代一个类(具有相同属性的对象),而复杂一些的工厂则可以造不同类型的对象。 下面以个水果工厂示例 复制代码 代码如下: function Banana() { this.price = "$1.5" } function Apple() { this.price = "$1.2" } function Orange() { this.price = "$2.2" } // 静态工厂类 function Fruit() {} Fruit.factory = function(type) { if (!window[type]) { return } var fruit = new window[type] return fruit } // 制造不同的水果 var banana = Fruit.factory("Banana") var apple = Fruit.factory("Apple") var orange = Fruit.factory("Orange")
有三个水果类Banana、Apple、Orange,一个水果工厂类Fruit,通过静态方法factory每次可以造出不同的水果类对象。 工厂模式在JavaScript原生对象Object也有所体现,比如 复制代码 代码如下: var obj = Object(), num = Object(1), str = Object("s"), boo = Object(false);