通常我们创建对象最常见的方式是使用new关键字来调用构造函数,这会导致对象之间产生依赖关系。工厂模式是一种设计模式,它通过使用一种方法来决定要实例化哪个类来帮助消除类之间的依赖关系。本文详细介绍了简单工厂模式的理论,并举例说明了简单工厂模式的具体应用。基本介绍简单工厂模式是最基本的工厂模式。通过定义工厂类,根据参数实例化具体的产品类。下面举个例子来说明一下:假设我们开发一个旅游行业网站,销售机票、酒店等产品。用户将要购买机票。我们可以定义相关的类如下:;}functionUser(){this.shopCart=[];}User.prototype={constructor:User,order:function(productType){varproduct=null;switch(productType){caseproductEnums.flight:product=newFlight();caseproductEnums。hotel:product=newHotel();default:}this.shopCart.push(product);}}varuser=newUser();user.order(productEnums.flight);这段代码定义了三个类:用户类User,机票类Flight,酒店类Hotel,其中User包含预订方法。用户预订时,直接传入商品类型即可。这段代码乍看没什么问题,但是需求和业务随时都在变。如果公司业务扩展,增加签证业务,我们要修改User类,保证支持签证。我们当然可以这样做,但是直接修改User类有什么不好呢?有没有更好的办法?首先要说的是User类,代表用户类,用户类本质上与具体的业务类型无关。也就是说,业务随时可能增加,但是用户关于业务的代码只是Createaproductorder。新增的签证服务与现有的机票、酒店基本没有区别。如果每次添加服务都需要修改User类,这会极大地影响代码的稳定性和可维护性。更好的解决方法是有一个专门的创建订单的类来管理不同的业务,这个类就是一个简单的工厂。我们修改代码如下:function(productType){returnproductFactories[productType]();}}})();User.prototype={constructor:User,order:function(productType){this.shopCart.push(productFactory.createProduct(productType));}}this这段代码主要修改两处:(1)添加一个产品工厂,根据不同的产品类型返回不同的对象(2)修改User类的order方法,调用工厂类中的createproduct方法.这样做的好处是:(1)让User的下单方法更加专注,只做预订商品的功能,并将商品订单抽取创建到一个专门的工厂类中,代码更加简洁明了(2)一个工厂专用管理产品,添加新产品非常容易,无需修改用户类。简单工厂模型的主要特点是将对象的创建和使用分开。主要由三部分组成:1.对象使用类,由工厂创建的用户使用,与对象的类型和创建过程无关2.工厂类,工厂类根据参数创建不同的对象传入并返回给对象使用类,包括不同对象的创建过程,如果有不同的对象,需要修改这个类3.对象类,不同业务生产的不同类,是工厂生产的产品.简单工厂模式的优点1、工厂类集中了所有对象的创建,便于统一管理对象的创建只需使用产品,实现职责单一3、易于扩展。如果增加新的业务,只需要增加相关的业务对象类和工厂类中生产业务对象的方法,其他地方不需要修改。适用场景1.需要根据不同的参数生成不同的实例。这些实例有一些共同的场景。2.用户只需要使用产品,不需要知道产品创建的细节。代码复杂度。原文地址:http://luopq.com/2015/11/03/design-pattern-factory/
