工厂方法模式设计模式浅谈.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

工厂方法模式设计模式浅谈

工厂方法经常用在以下两种情况中:

第一种情况是对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。JavaCollection中的iterator()方法即属于这种情况。

第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程这对于使用者来说是透明的。

工厂模式的定义

工厂方法模式(FactoryMethod)的意义就是是定义一个用来创建产品对象工厂的接口,然后将所要完成的工作交给子类运行。使得核心工厂类不再对产品进行创建,这样核心类就成为了一个类似抽象工厂的角色,只提供子类所要创建的对象的借口,这样做的目的是使得工厂方法模式可以使系统在不改变工厂角色的情况下引进其他新的产品。

工厂方法模式其实是简单工厂模式的衍生,完善了许多简单工厂模式的缺点,解决了许多简单工厂模式的问题。

工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的工厂类或者接口,这个类将不再负责详细的产品生产,详细的生产工作由工厂的子类去完成实现。在样的模式中,工厂类和产品类一般可以相对应。就是一个抽象工厂对应一个抽象的产品,一个具体工厂对应一个具体产品。

工厂方法模式是最典型的模板方法模式应用。

工厂方法模式角色与结构

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。

具体工厂(ConcreteCreator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。

抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。

具体产品(ConcreteProduct)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。

优点

有(1)用户只需要关心所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品类的类名。

它能够使工厂方可以自主确定创建何种产品对象,而如何创建这个对象的细节则完美封装在具体共产内部。

工厂方法模式可以使系统在不改变工厂角色的情况下引进其他新的产品。

缺点

添加新产品是,需要编写新的具体产品类,还要提供与之对应的具体工厂类,系统中类的个数将成对增加,会给系统带来额外的开销。

对工厂方法模式与简单工厂模式对比

工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而可以成为多个简单工厂模式的综合,进而推广了简单工厂模式。工厂方法模式退化后可以变得很像简单工厂模式。

实例介绍

宝马工厂生产宝马汽车,奔驰工厂生产奔驰汽车使用工厂,使用工厂模式模拟场景,绘制相应类图用java实现。

工厂方法模式的一优点在于增加新的产品类无需修改现有系统,所以先创建抽象产品类autocar,在对抽象产品类进行实例化,即具体产品类BMWautocar和具体产品类Benzautocar;在创建抽象工厂类autocarFactory,在对抽象工厂类进行实例化,即具体工厂类BMWautocarFactory和具体工厂类BenzautocarFactory。

建创建对象的任务委托给多个工厂子类的某一个,客户端在使用是可以无需关心是哪一个工厂创建的产品子类

实例代码及解释

抽象产品类汽车autocar;

autocar作为抽象产品类,它可以是一个接口,也可以是一个抽象类,其中包含了所有产品都具有的业务方法yunxing()行驶;

(2)具体产品类BMWautocar(宝马汽车类)

总结与思考

工厂方法模式扩展

使用多个工厂方法

在抽象工厂角色中定义多个方法,让具体工厂角色实现这些不同的工厂方法。

产品对象的重复使用

调用产品类的构造函数创建一个新的产品实例,然后将这个实例提供给客户端

多态性的丧失和模式的退化

一个工厂模式方法的实现依赖于工厂角色和产品的多态性。

文档评论(0)

135****8227 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档