javascript中工厂方法模式祥解(Factory method pattern)

xiaoxiao2021-02-27  237

    工厂方法模式(Factory method pattern)是一种实现“工厂”概念的面上对象设计模式。实质是定义一个创建对象的接口,但是让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。     创建一个对象常常需要复杂的过程,所以不适合在一个复杂的对象中。创建对象可能会导致大量的重复代码,也可能提供不了足够级别的抽象。工厂方法模式通过定义一个单独的创建对象的方法来解决这些问题,由子类实现这个方法来创建具体类型的对象。

工厂模式就是一种有助于消除两个类依赖性的模式。 //例1 var Car = (function () { var Car = function (model, year, miles) { this.model = model; this.year = year; this.miles = miles; }; return function (model, year, miles) { return new Car(model, year, miles); }; })(); var tom = new Car("Tom", 2009, 20000); var dudu = new Car("Dudu", 2010, 5000); //例2 var productManager = {}; productManager.createProductA = function () { console.log('ProductA'); } productManager.createProductB = function () { console.log('ProductB'); } productManager.factory = function (typeType) { return new productManager[typeType]; } productManager.factory("createProductA");//例3var page = page || {}; page.dom = page.dom || {}; //子函数1:处理文本 page.dom.Text = function () { this.insert = function (where) { var txt = document.createTextNode(this.url); where.appendChild(txt); }; }; //子函数2:处理链接 page.dom.Link = function () { this.insert = function (where) { var link = document.createElement('a'); link.href = this.url; link.appendChild(document.createTextNode(this.url)); where.appendChild(link); }; }; //子函数3:处理图片 page.dom.Image = function () { this.insert = function (where) { var im = document.createElement('img'); im.src = this.url; where.appendChild(im); }; };//那么我们如何定义工厂处理函数呢?其实很简单:page.dom.factory = function (type) { return new page.dom[type]; }//使用方式如下:var o = page.dom.factory('Link'); o.url = 'http://www.cnblogs.com'; o.insert(document.body);

    工厂模式使用场合

    1. 动态实现     例如自行车的例子,创建一些用不同方式实现统一接口的对象,那么可以使用一个工厂方法或者简单工厂对象来简化实现过程。选择可以是明确进行的也可以是隐含的。     2. 节省设置开销     如果对象要进行复杂的并且彼此相关的设置的时候,那么工厂模式可以很显著的减少每种对象的代码量。将特定的设置代码提取出来会使得代码有极大地提升。并且能优化结构便于维护。     3. 用于许多小型对象组成一个大对象。     4. 工厂模式之利     主要好处就是可以消除对象间的耦合,通过使用工程方法而不是new关键字。将所有实例化的代码集中在一个位子防止代码重复。     5. 工厂模式之弊     大多数类最好使用new关键字和构造函数,可以让代码更加简单易读。而不必去查看工厂方法来知道。
转载请注明原文地址: https://www.6miu.com/read-3229.html

最新回复(0)