软件设计模式ch4 - 工厂方法模式.ppt_第1页
软件设计模式ch4 - 工厂方法模式.ppt_第2页
软件设计模式ch4 - 工厂方法模式.ppt_第3页
软件设计模式ch4 - 工厂方法模式.ppt_第4页
软件设计模式ch4 - 工厂方法模式.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

1、软件设计方法及设计模式,张聚礼 副教授/系统分析师,工 厂 方 法 模 式,4,一,二,三,四,五,六,对象村比萨,简单工厂,工厂方法模式,比萨店,抽象工厂模式,比较工厂方法和抽象工厂,主要内容,一、对象村比萨,思考“new”,识别变化的部分,新的问题,(一),(二),(三),看到new,就会想到具体,(一) 思考“new”,一般用法,(一) 思考“new”,同理,(一) 思考“new”,这样,一旦发生变化,必须重新检查并修改该代码,缺乏柔性,不便于维护。,(一) 思考“new”,但是,总要使用new的。 真正的问题是变化产生的。,(一) 思考“new”,假如你有一个比萨店,代码可能如下:,(

2、二) 识别变化的部分,这样,需要更多的比萨类型。,(二) 识别变化的部分,问题是需要增加更多的比萨类型。,(三) 新的问题,二、简单工厂,封装创建对象的代码,建立简单的比萨工厂,(一),(二),定义简单工厂,(三),使用框架,(四),允许子类做决定,(五),把创建比萨的代码移到另一个对象中。,(一) 封装创建对象的代码,这个新对象称为“工厂” 工厂处理创建对象的细节,(一) 封装创建对象的代码,(二) 建立简单的比萨工厂,重做PizzaStore类,(二) 建立简单的比萨工厂,(三) 定义简单工厂,针对接口编程可以隔离掉系统以后可能发生的一大堆改变。 用静态方法定义的工厂被成为静态工厂,这样就

3、不用使用创建对象的方法来实例化对象,使用方便。但是这样做的缺点是无法通过继承来改变创建方法的行为。 简单工厂不是一种设计模式,但是它比较常用。,(三) 定义简单工厂,加盟比萨店,(三) 定义简单工厂,现在的做法。,(三) 定义简单工厂,但是,想要更多的质量控制,(三) 定义简单工厂,修改PizzaStore类,(四) 使用框架,(五) 允许子类做决定,子类如何做决定,(五) 允许子类做决定,从orderPizza()来看,(五) 允许子类做决定,orderPizza()做了许多事情,(五) 允许子类做决定,当orderPizza()调用createPizza()时,比萨店子类负责创建比萨。做哪

4、一种比萨由比萨店来决定。,(五) 允许子类做决定,三、工厂方法模式,开比萨店,声明工厂方法,认识工厂方法模式,(一),(二),(三),平行的类层级,(四),定义工厂方法模式,(五),(一) 开比萨店,纽约风味比萨店,(一) 开比萨店,芝加哥风味比萨店、加州风味比萨店,(二) 声明工厂方法,(二) 声明工厂方法,工厂方法,(二) 声明工厂方法,如何使用比萨工厂方法订购比萨呢?,(二) 声明工厂方法,如何订购 需要比萨店的实例 有了各自的PizzaStore,分别调用orderPizza()方法,传入各自喜爱的比萨类型 调用createPizza()方法创建比萨 orderPizza()方法并不知

5、道真正创建的是哪种比萨,但知道这是一个比萨。这就够了,不是吗?,(二) 声明工厂方法,订单比萨,(二) 声明工厂方法,(二) 声明工厂方法,(二) 声明工厂方法,(二) 声明工厂方法,(二) 声明工厂方法,现在,来实现比萨,(二) 声明工厂方法,现在,来实现比萨(续),(二) 声明工厂方法,还需要一些子类,(二) 声明工厂方法,还需要一些子类(续),(二) 声明工厂方法,现在,来吃比萨吧,(二) 声明工厂方法,RUN,(三) 认识工厂方法模式,Creator类,(三) 认识工厂方法模式,Product类,(四) 平行的类层级,两者之间的关系,(五) 定义工厂方法模式,工厂(Factory Me

6、thod Pattern)方法模式:定义了一个创建对象的接口,但是由子类来决定要实例化的类是哪一个。它让类把实例化推迟到了子类。,(五) 定义工厂方法模式,四、比萨店,对象依赖,依赖倒置原则,(一),(二),比萨店,(三),(一) 对象依赖,设计原则六: 要依赖抽象,不要依赖具体类。,(二) 依赖倒置原则,例如:,(二) 依赖倒置原则,依赖倒置原则说明不能让高层组件依赖于底层组件,而且它们都应该依赖于抽象。,(二) 依赖倒置原则,倒置思考方式 实现一个比萨店,首先应该从顶端开始,然后到具体的类。,(二) 依赖倒置原则,现在,倒置想法,不从顶端开始,想到要抽象一个Pizza。,(二) 依赖倒置原

7、则,现在,重新思考比萨店的设计,需要用到工厂方法。,(二) 依赖倒置原则,遵循的原则 变量不可以持有具体类的引用。这可以通过使用工厂避开。 不要让类派生自具体类。否则就会依赖具体类,违反了“针对接口编程,而不是针对现实编程”的软件设计原则。 不要覆盖基类中已实现的方法。出现这样的情况就说明基类设计的有问题。,(二) 依赖倒置原则,(二) 依赖倒置原则,具有弹性框架,并遵循设计原则。,(三) 比萨店,确保原料一致,(三) 比萨店,原料家族,(三) 比萨店,原料家族(续),(三) 比萨店,原料家族(续),(三) 比萨店,原料家族(续),(三) 比萨店,建造原料工厂,(三) 比萨店,建造纽约原料工厂

8、,(三) 比萨店,重做Pizza,(三) 比萨店,重做Pizza(续),(三) 比萨店,重做Pizza(续),(三) 比萨店,回到比萨店,(三) 比萨店,看看,我们做了什么,(三) 比萨店,更多的比萨,(三) 比萨店,更多的比萨(续),(三) 比萨店,更多的比萨(续),(三) 比萨店,五、抽象工厂模式,定义,类图,(一),(二),从比萨店的观点看,(三),(一) 定义,抽象工厂模式:提供一个接口,用于创建相关或者依赖对象的家族,而不需要明确指定具体类。,(二) 类图,(三) 从比萨店的观点看,六、 比较工厂方法和抽象工厂,工厂方法,抽象工厂,(一),(二),(一) 工厂方法,(二) 抽象工厂,

9、七、总结,Abstraction Encapsulation Polymorphism Inheritance,Encapsulate what varies. Favor composition over inheritence. Program to interfaces, not implementations.,Strategy - defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independ

10、ently from clients that use it.,总结,OO Basics,OO Principles,OO Patterns,1,Observer - defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically,总结,OO Patterns,Strive for loosely coupled designs between objects that

11、 interact.,OO Principles,2,Decorator - Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.,总结,OO Patterns,Classes should be open for extension but closed for modification.,OO Principles,3,Abstract Factory - Provide an interface for creating families of related or depedent objects without specifying their concrete classes. Factory Method - Define an interface for creating an object, but let subclasses decide w

温馨提示

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

评论

0/150

提交评论