工厂方法模式――创建型模型_第1页
工厂方法模式――创建型模型_第2页
工厂方法模式――创建型模型_第3页
工厂方法模式――创建型模型_第4页
工厂方法模式――创建型模型_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、前言成型牛鼻子将斯坦共和国化过程抽象化。 这些个有助于系统独立于创建、合并和表达这些对象的方式。 一个类创建模式使用继承更改来更改斯坦共和国化的类,而一个对象创建模式将斯坦共和国化传递给另一个对象。 随着系统进化为依赖于对象复合而不是类继承,创建类型模式变得更加重要。 其次,介绍最初的成型模型工厂方法模型。动机在软件系统中,经常面临“某个对象”的创建问题。 由于用户需求的变化,该对象的具体实现经常面临激烈的变化,但其固有的界面比较稳定,如何应对这些需求的变化? 封闭反应历程隔离该“易变对象”的变化点,使系统中的“依赖于该对象的对象”不随需求变化而变化,保持系统的一定稳定性和稳健性。 这是工厂的

2、方法能很好地解决的一面。意图定义用于创建对象的接口,以便可以确定子类要建立关斯坦共和国帧的类。 Factory Method将类的斯坦共和国化延迟到子类。结构图1 .“抽象工厂”(creator )角色:作为工厂模式模型的核心,从该模型创建对象的特定工厂类必须实现该接口2 .混凝土类角色:实现抽象工厂类的特定工厂类,包括与应用程序相关的逻辑,并且从客户端调用以生成特定产品对象。 上图中的类BMWCreator和BENZCreator是用于创建不同实现的Car对象的两个具体工厂实现类3 .抽象产品角色:由工厂模式创建的对象的父类型,即特定产品对象的公共父

3、类或公共界面。 在上图中,这个角色是Car4 .具体产品角色:实现抽象产品界面的产品。 每个具体的产品,一般对应着建立自己的具体工厂。 在上图中,宝马和BENZ是两个具体的产品类示例查询密码1:公共助理级别卡。2:公共助理卷动();:公共辅助卷停止();4: )5:63360公共等级宝马扩展卡。7:公共音频移动()。83360系统. out .打印机( bmwismoving! ;是9: )103360公共音频停止()。11: system.out.println ( benzisstopping! );12: 13: 14:153360 publicclassbenzextendscar16

4、3360公共音频移动()。173360 system.out.println ( benzismoving! );18: )1933 360公共音频停止()。2033 360 system.out.println ( benzisstopping! );21: 22: 23:243360 publicabstractclasscreator25:publicabstractcarfactory ();26: 27:283360 publicclassbmwcreatorextendscreator 0。293360公共汽车工厂()。303360新宝马();31: )32: )33:343360

5、公共classbenzcreatorextendscreator 0。353360公共汽车工厂()。363360返回新benz ();37: )38: )393360 3358杜杜. qqq 23.com403360公共级客户端。413360公共视频域(字符串 args ) 。423360创建器c1=新宝马创建器();4:创建器c2=新文本创建器();44:45: Car bmw=c1.factory ();46: Car benz=c2.factory ();47:48: bmw.Move ();49: bmw.Stop ();50:51: benz.Move ();52: benz.Sto

6、p ();是53: )是54: )上面的查询密码表明了工厂方法实现的一般方法. 从客户端查询密码来看,我们操作抽象类的对象,这也是面向接口的计程仪编程的核心。 必须创建特定的产品对象。 首先检索相应的产品工厂,然后创建特定的产品对象。 在此,客户端需要决定斯坦共和国哪些具体的工厂来创建特定的产品对象,与简单的工厂模型相比,工厂方法要将内部逻辑判断移至客户端查询密码,对新的产品对象进行斯坦共和国化简单工厂模型的最大优点包括工厂类方法所需的逻辑判断,根据客户端的选择条件与动态斯坦共和国定相关的类消除了对客户端具体产品的依赖,但是如果添加新产品,则可以将工厂类逻辑现实的场面在实际运用场景中,工厂方法

7、应该是最常用的模型之一。 该模型不仅实现了过程的简化,而且出于实用性。 也就是说,任何商业软件系统都有工厂方法模式的形式,例如以工厂方法模式切换各种数据库例,但主流的数据库几乎都通讯端口增加、删除、修改、调查的功能具体的实现方式与样本查询密码的实现信息帧工作一致,在此不重复示例。实现要点1. Factory Method模式有两种方法。 一个是Creator类是抽象类,不提供声明的工厂模式实现;另一个是Creator类是特定类,提供声明的工厂模式的差动奥尔特实现2 .工厂方法的作用不仅是对象的制作,还可以在工厂方法中进行各种对象和资源的初始化、各种残奥仪表的设定等3、在工厂方法的实现过程中,通

8、常一个特定的产品对应于一个特定的工厂,即所谓的一对一的关系。 工厂和产品都面向统一的接口进行了查询密码化。 典型的面向接口的计程仪编程方式运用效果1 .使用工厂模式在类内部创建对象通常比直接对对象进行斯坦共和国更灵活、更方便2. Factory Method通过物件导向的方法,将对象的创建工作延迟到子类,提供灵活的扩展方式,使产品和客户端的原始紧密结合成为松散的耦合关系。适应性1 .如果不知道类需要创建的对象的类2 .如果类指定由该子类创建的对象3 .类将创建对象的角色委托给多个帮助子类中的一个,并且希望将哪个帮助子类本代理的信息局部化时相关模式1 .工厂方法模式和抽象工厂方法模式:可以组合使

9、用两种模式。 如需详细说明,请参考下一代抽象工厂方法模式的讲义分析。2 .工厂模式模式和数字大板块方法模式:两种模式的外观相似,有抽象类,从子类提供一些实现,而工厂模式模式的子类侧重于创建产品对象。这些个两种模式可以组合使用,而模式方法模式则提供总结工厂模式模型的本质是延迟到子类选择实现。 工厂的方法很好地体现了开关原则和依存倒置原则。 “开闭原则“扩展开放,修改关闭”,工厂方法模型中,需要添加新的产品对象时,根据产品接口实现新的产品对象,根据抽象的工厂方法接口实现新的具体工厂,以相同的逻辑对应依赖倒置原则的“不依赖具体的类”简单地说,就是上位组件必须依赖下位组件,上位组件和下位组件都必须依赖

10、抽象而不是具体的实现,在工厂方法模型中, 具体的工厂类和具体的产品类都是以统一的接口(抽象)为基础的,工厂方法模型的讲义到此为止,但工厂方法模型的实现比较简单,我们需要理解其本质和适应场景。 下篇将继续介绍工厂方式模型的同胞兄弟抽象工厂方式模型,敬请期待前言上一篇文章介绍的工厂模式模型主要用于创建单个对象,但如果需要在一个工厂模式中创建一系列相关对象或相互依存对象,该怎么办? 完全按照工厂模式模型进行设置修订的话,在设置修订的过程中,我们将面临越来越多的工厂类,这就是从此往后登场的抽象工厂方法模型的拿手之处。动机在软件系统中,我们一直面临着一系列相关或相互依存的对象的制作工作,而且由于需求的多

11、样化,在系统的进化过程中,存在着越来越多的系列对象的制作工作。 此时,在传统的对象创建模式中,不能灵活地处理这样的场景,为了避免客户程序和这样的多个对象创建作业的紧密结合,更紧凑的“封装反应历程”这是抽象工厂的方法模型的由来。意图提供用于创建一组相关对象或相互依存对象的接口,而无需指定特定的类。结构图1 .抽象工厂(Abstract Factory )角色:声明用于创建抽象产品对象的操作界面是抽象工厂模式模型的核心,与商业逻辑无关。2 .混凝土工厂角色:创建特定产品对象的操作,包括选择与系统商业逻辑密切相关的适当产品对象的逻辑。3 .“抽象产品”(Abstract Product )角色:在产

12、品对象类中声明的界面,是工厂模式创建的对象的父类。4 .具体产品角色:实现abstract产品接口的具体产品是由相应的具体工厂制作的产品对象,与业务相关。示例查询密码1: publicabstractclassabstractproducta2: )3:43360公共级产品1 extendsabstractproducta。53360公共字符串测试()。63360回报it is产品1;7: )是8: )9:103360公共级产品a2extendsabstractproducta。113360公共字符串测试()。123360返回it产品a 2;13: 14: 15:163360 publicab

13、stractclassabstractproductb17: )18:1933 360 publicclassproductb 1扩展版sabstractproductb 。2033 360公共字符串测试()。213360返回,it is产品b 1。22: 23: 24:253360 publicclassproductb2extendsabstractproductb263360公共字符串测试()。273360返回,it is产品b 2,28: )29: )30:313360 publicabstractclassabstractfactory 0。323360 publicabstractabstractproductacreateproducta ();: publicabstractabstractproductbcreateproductb ();34: )35:363360 publicclassconcretefactory 1扩展sabstractfactory 0。373360 publicabstractproductacreateproducta () 。383

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论