《讲课课件(工厂方法、抽象工厂模式.ppt》由会员分享,可在线阅读,更多相关《讲课课件(工厂方法、抽象工厂模式.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计面向对象程序设计 2009-10-26面向对象程序设计面向对象程序设计(抽象工厂(抽象工厂/工厂方法)工厂方法)主讲人:叶溶主讲人:叶溶主讲人:叶溶主讲人:叶溶 2/29面向对象程序设计面向对象程序设计课件结构与知识体系课件结构与知识体系11.概念2.简单工厂模式3.工厂方法模式4.抽象工厂模式5.总结 3/29面向对象程序设计面向对象程序设计工厂模式有以下几种形态:简单工厂(SimpleFactory)模式工厂方法(FactoryMethod)模式抽象工厂(AbstractFactory)模式工厂模式就是专门负责将大量有共同接口的类共同接口的类实例化,而且不必事先知道每次是要
2、实例化哪一个类的模式。概念概念112 4/29面向对象程序设计面向对象程序设计2简单工厂模式简单工厂模式定义:定义:专门定义一个类来负责创建其他类的实例被创建的实例通常都具有共同的父类或接口。简单工厂模式又称为静态工厂方法(StaticFactoryMethod)模式,属于类的创建型模式,通常根据一个条件(参数)来返回不同的类的实例。意图:意图:提供一个类,由它负责根据一定的条件创建某一具体类的实例 5/29面向对象程序设计面向对象程序设计2简单工厂模式简单工厂模式 6/29面向对象程序设计面向对象程序设计比如说,你有一个描述你的后果园的系统,在你的后果园里有各种的花,但还没有水果你现在要往系
3、统里引进一些新的类,用来描述下列的水果:葡萄Grapes草莓Strawberry苹果Apple2简单工厂模式简单工厂模式 7/29面向对象程序设计面向对象程序设计2简单工厂模式简单工厂模式面向对象程序设计面向对象程序设计 2009-10-262简单工厂模式简单工厂模式作为小花果园的主人兼园丁(如同一个可以创建水果产品的工厂一样),也是系统的一部分,自然要由一个合适的类来代表,这个类就是FruitGardener类。9/29面向对象程序设计面向对象程序设计2简单工厂模式简单工厂模式 10/29面向对象程序设计面向对象程序设计2简单工厂模式简单工厂模式演示 11/29面向对象程序设计面向对象程序设
4、计2简单工厂模式简单工厂模式优点:优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,外界可以从直接创建具体产品对象的尴尬局面中摆脱出来。外界与具体类隔离开来,偶合性低。12/29面向对象程序设计面向对象程序设计2简单工厂模式简单工厂模式缺点:缺点:工厂类集中了所有实例的创建逻辑,容易违反高内聚的责任分配原则虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。它所能创建的类只能是事先教考虑到的。应用情景应用情景工厂类负责创建的对象比较少客户只知道传入了工厂类的参数,对于何始创建对象(逻辑)不关心 13/29面向对象程序设计面向对象程序设计3工厂
5、方法模式工厂方法模式定义定义工厂方法模式又称为工厂模式,也叫虚拟构造器(VirtualConstructor)模式或者多态工厂模式(PolymorphicFactory),在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。意图意图定义一个用户创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到其子类。14/29面向对象程序设计面向对象程序设计3工厂方法模式工厂方法模式 15/29面向对象程序设计面向对象程序设计在简单工厂模式中,一个果园只有一个园丁,
6、管理全部果树,现在我们果园扩大规模,雇佣新园丁,规定每个新园丁专门负责一种水果,也就是说:葡萄园的园丁只管理葡萄、苹果园的园丁只管理苹果。这样园丁们各负其责,互不相关。3工厂方法模式工厂方法模式 16/29面向对象程序设计面向对象程序设计3工厂方法模式工厂方法模式 17/29面向对象程序设计面向对象程序设计取代了过去的全能角色的是一个抽象的园丁,这个角色规定出具体园丁角色需要实现的具体职能而真正负责作物管理的则是各种作物的具体园丁角色。3工厂方法模式工厂方法模式 18/29面向对象程序设计面向对象程序设计演示3工厂方法模式工厂方法模式 19/29面向对象程序设计面向对象程序设计3优点:优点:它
7、能够使工厂可以自主确定创建何种产品对象。而且如何创建一个具体产品的细节完全封装在具体工厂内部,符合高内聚,低耦合。在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品。缺点:缺点:在添加新产品时,需要编写新的具体产品类(其实这不算一个缺点,因为这是不可避免的),要增加与之对应的具体工厂类。工厂方法模式工厂方法模式 20/29面向对象程序设计面向对象程序设计应用情景:应用情景:类不知道自己要创建哪一个对象时。类用它的子类来指定创建哪个对象。当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的
8、时候。3工厂方法模式工厂方法模式 21/29面向对象程序设计面向对象程序设计4意图意图:提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。抽象工厂模式抽象工厂模式 22/29面向对象程序设计面向对象程序设计4抽象工厂模式抽象工厂模式面向对象程序设计面向对象程序设计 2009-10-264抽象工厂模式抽象工厂模式现在果园又引进蔬菜种类,这样果园就有了蔬菜和果树两种植物。24/29面向对象程序设计面向对象程序设计引进蔬菜不久之后,果园又扩大规模,现在在南方和北方都有了果园,但是蔬菜或是水果的种植方式在南方和北方是不一样的,因此,南方的果园的园丁只管理南方的蔬菜和水果,北方的果园的园
9、丁只管理北方的蔬菜和水果。4抽象工厂模式抽象工厂模式 25/29面向对象程序设计面向对象程序设计4抽象工厂模式抽象工厂模式 26/29面向对象程序设计面向对象程序设计4演示抽象工厂模式抽象工厂模式 27/29面向对象程序设计面向对象程序设计4优点:优点:隔离了具体类的生成,客户不需要知道怎样生成了每一个具体产品,什么时间生成的。它将客户与具体的类分离,依赖于抽象类,耦合性低。它有利于更换产品系列,由于客户端只依赖于抽象类,更换产品系列时,只须更改一下具体工厂名就行了。抽象工厂模式抽象工厂模式 28/29面向对象程序设计面向对象程序设计4缺点:缺点:难以支持新种类的产品。难以扩展抽象工厂以生产新
10、种类的产品。这是因为抽象工厂的个数确定了可以被创建的产品集合,支持新种类的产品就需要扩展该工厂接口,这将涉及抽象工厂类及其所有子类的改变。应用情景:应用情景:同一个产品族的产品在一起使用时,而且它们之间是相互依赖的,不可分离。系统需要由相互关联的多个对象来构成。你想提供一组对象而不显示它们的实现过程,只显示它们的接口。系统不应当依赖某一些具体产品类。抽象工厂模式抽象工厂模式 29/29面向对象程序设计面向对象程序设计5工厂方法模式:工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。抽象工厂模式:抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。总结总结 30/29面向对象程序设计面向对象程序设计5总结总结