第六章 面向对象的软件设计模式.ppt

第六章 面向对象的软件设计模式.ppt

  1. 1、本文档共78页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 面向对象的软件设计模式

第六章 面向对象的软件设计模式 面向对象的软件设计模式 创建型设计模式——就是用来创建对象的模式。 结构型设计模式——讨论类和对象的结构。采用继承机制来组合接口或通过组合一些对象,以实现新的功能。 行为型设计模式——描述算法对象间职责的分配。行为型设计模式不仅描述对象或类的模式,还描述它们之间的通信模式。 6.1 创建型设计模式 创建型设计模式——就是用来对象创建的模式。 创建型模式的目标是简化对象的创建和方便对象的管理。 6.1.1 工厂模式(Factory method) 工厂模式的由来 工厂模式的结构 工厂模式的参与者 应用举例 适用性及效果分析 6.1.1.1 工厂模式的由来(1/2) 在面向对象编程中, 很普遍的方法是用一个new操作符产生一个对象实例, new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。 首先,要使用new运算符创建一个对象我们必须清楚所要创建的对象的类信息,而有时候这并不现实,譬如打开一个视频文件需要一个播放器对象,但是用户可能不知道具体播放器叫什么名字,而只需要系统分派给这个视频文件一个合适的播放器就可以了,这种情况下用new运算符是不适宜的。 6.1.1.1 工厂模式的由来(2/2) 其次,许多类型对象的创造需要一系列的步骤:可能需要计算或取得对象的初始设置;选择生成哪个子对象实例;或在生成需要的对象之前必须先生成一些辅助功能的对象等。在这些情况下,新对象的建立就是一个过程,而不是一个简单的操作。 为了方便地完成这些复杂的对象创建工作,这就引入了工厂模式。 工厂模式又称虚拟构造机(Virtual Constructor)。它定义一个用于创建对象的接口,让子类决定实例化哪一个类,即将类的实例化延迟到子类。 工厂模式包括Factory、Concrete Factory、Product 和ConcreteProduct 四个部分。 6.1.1.2 工厂模式的结构 6.1.1.3 工厂模式的参与者 Product:产品角色,定义工厂方法所创建的对象的接口。 ConcreteProduct:具体的产品角色,实现Product接口。 Factory:“抽象的工厂”角色,声明工厂方法,该方法返回一个Product类型的对象。Factory也可以定义一个工厂方法的默认实现,它返回一个默认的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。 ConcreteFactory:具体的工厂角色,创建具体产品的子工厂,重写工厂方法以返回一个ConcreteProduct实例。 6.1.1.4 应用举例 假设快餐店KFC要给顾客提供一系列的食品,如鸡腿、鸡翅等,顾客每要求一种食品,KFC应该可以很快“生产”出来,如何使用面向对象的方法,并采用工厂模式实现这个过程? 代码如下: //抽象的KFC食品,Product角色 public abstract class KFCFood { public abstract void show(); } //下面两个类表示两种具体的KFC食品,它们继承了抽象的KFC食品 //Concrete Product1角色 public class Chicken: KFCFood { public override void show() { Console.WriteLine(“鸡腿+1”); } } //Concrete Product2角色 public class Wings: KFCFood { public override void show() { Console.WriteLine(“鸡翅+1”); } } //产品工厂,Factory角色 interface IKFCFactory { KFCFood CreatFood(); } //鸡翅膀工厂,ConcreteFactory角色 public class WingsFactory: IKFCFactory { public KFCFood CreateFood() { return new Wings(); } } //鸡腿工厂,ConcreteFactory角色 public class ChickenFactory: IKFCFactory { public KFCFood CreateFood() { return new Chicken(); } } Static void

文档评论(0)

jyf123 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档