- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件体系结构—设计模式3.1—简单工厂模式
在这个系统中,功能的扩展体现在引进新的产品上。“开–闭”原则要求系统允许当新的产品加入系统中,而无需对现有代码进行修改。这一点对于产品的消费角色是成立的,而对于工厂角色是不成立的。 对于产品消费角色来说,任何时候需要某种产品,只需向工厂角色请求即可。而工厂角色在接到请求后,会自行判断创建和提供哪一个产品。所以,产品消费角色无需知道它得到的是哪一个产品;换言之,产品消费角色无需修改就可以接纳新的产品。 对于工厂角色来说,增加新的产品是一个痛苦的过程。工厂角色必须知道每一种产品,如何创建它们,以及何时向客户端提供它们。换言之,接纳新的产品意味着修改这个工厂角色的源代码。 综合本节的讨论,简单工厂角色只在有限的程度上支持“开–闭”原则。 《风俗通》中说:“俗说天地开辟,未有人民。女娲抟黄土为人。”女娲需要用土造出一个个的人,这就是简单工厂模式的应用。 女娲抟土造人的思想便是简单工厂模式的应用。现在本章就试图使用UML 和模式的语言来解释女娲的做法。首先,在这个造人的思想里面,有几个重要的角色:女娲本身、抽象的人的概念和女娲所造出的具体的人们。 2.6 练习题1——女娲抟土造人 2、在本节开始时不是说,工厂模式就是在不使用new 操作符的情况下,将类实例化的吗,可为什么在具体实现时,仍然使用了new 操作符呢? 3、(1)请使用简单工厂模式设计一个创建不同几何形状,如圆形,方形和三角形实例的描图员(Art Tracer)系统。每个几何图形都要有画出draw()和擦去erase()两个方法。 当描图员接到指令,要求创建不支持的几何图形时,要提出BadShapeException 异常。 (2)请给出上一题的源代码。 (3)请简单举例说明描图员系统怎样使用。 2.6 练习题2 抟土造人 音:tuan 二声 * 软件体系结构 东北石油大学 计算机与信息技术学院 刘志刚 dqpilzg@163.com 1、工厂模式的几种形态 工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式。 (2)工厂方法(Factory Method)模式,又称多态性工厂模式 或虚拟构造子模式; (3)抽象工厂模式,又称工具箱(Kit 或Toolkit)模式。 2、简单工厂模式 下面就是简单工厂模式的简略类图。 2.1 简单工厂模式的案例 比如说有一个农场公司,专门向市场销售各类水果。 1、在这个系统里需要描述下列的水果: 葡萄 Grape 草莓 Strawberry 苹果 Apple 水果与其他的植物有很大的不同,就是水果最终是可以采摘食用的。那么一个自然的作法就是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开。 水果接口规定出所有的水果必须实现的接口,包括任何水果类必须具备的方法:种植plant(),生长grow()以及收获harvest()。 (1)下面是Fruit代码 (2)Apple 类是水果类的一种,因此它实现了水果接口所声明的所有方法。另外,由于苹果是多年生植物,因此多出一个treeAge 性质,描述苹果树的树龄。下面是这个苹果类的源代码。 (3)Grape 类是水果类的一种,也实现了Fruit 接口所声明的所有的方法。但由于葡萄分有籽和无籽两种,因此,比通常的水果多出一个seedless 性质,下面是这个葡萄类的源代码。 (4)Strawberry 类实现了Fruit 接口,因此,也是水果类型的子类型,下面是这个草莓类的源代码。 2、 农场的园丁也是系统的一部分,自然要由一个合适的类来代表。这个类就是 FruitGardener 类,其结构由下面的类图描述。 FruitGardener 类会根据客户端的要求,创建出不同的水果对象,比如苹果(Apple),葡萄(Grape)或草莓(Strawberry)的实例。而如果接到不合法的要求,FruitGardener 类会抛出BadFruitException 异常,如下图所示。 请见园丁类的源代码如下所示。 可以看出,园丁类提供了一个静态工厂方法。在客户端的调用下,这个方法创建客户端所需要的水果对象。如果客户端的请求是系统所不支持的,工厂方法就会抛出一个BadFruitException 异常。这个异常类的源代码如下所示。 在使用时,客户端只需调用FruitGardener 的静态方法factory()即可。请见下面的示意性客户端源代码。 这样,农场一定会百果丰收啦! 2.2简单工厂模式的结构 简单工厂模式是类的创建模式,这个模式的一般性结构如下图所示。 1、角色与结构 简单工厂模式就是由一个工厂类可以根据
文档评论(0)