1 / 37
文档名称:

软件设计原则与模式.pptx

格式:pptx   大小:394KB   页数:37页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

软件设计原则与模式.pptx

上传人:q2299971 2017/7/28 文件大小:394 KB

下载得到文件列表

软件设计原则与模式.pptx

文档介绍

文档介绍:书名:软件设计原则与模式
ISBN: 978-7-111-51002-4
作者:郭双宙
出版社:***出版社
本书配有电子课件
第二章创建模式(Creativnal Pattem)
创建模式(CreativnalPattem)是对类的实例化过程的抽象化。
一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建模式描述了怎样构造和封装这些动态的决定。
创建模式分为类的创建模式和对象的创建模式两种。
类的创建模式:类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到哪些具体类的信息,并且隐藏了这些类的实例是如何被创建和放在一起的。
对象的创建模式:对象的创建模式则是把对象的创建过程动态地委派给另一个对象,从而动态地决定客户端将得到哪些具体类的实例,以及这些类的实例是如何被创建和组合在一起的。
本章将要介绍的创建模式包括以下几种:简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、多例模式、建造模式、原始模型模式等。
第一节简单工厂(SimpleFactory)模式
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
简单工厂模式将客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
工厂模式的几种形态
工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态:
 简单工厂(Simple Factory)模式:又称静态工厂方法模式(Static Factory Method Pattern)。
 工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic Factory)模式或虚拟构造子<VirtualConstructor)模式。
 抽象工厂〔AbstractFactory)模式:又称工具箱(Kit或Toolkit)模式。
简单工厂模式的结构
简单工厂模式是根据传入的参数来决定到底应该创建那个类的事例出来。下图是简单工厂模式的一般结构。
由图可以看出,简单工厂模式由工厂角色、抽象产品角色、产品角色这三部分组成。
简单工厂模式的优缺点
简单工厂模式的优点
模式的核心是工厂类。这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登
录验证类的实例,而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。
简单工厂模式的缺点
这个工厂类集中了所有的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。
第二节工厂方法(Factory Method)模式
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
与简单工厂模式的区别:在工厂方法模式中,核心的工厂类不再负责所有具体产品实例的创建,而仅仅是需要负责给出具体工厂子类必须实现的接口,让工厂子类去负责具体产品实例的创建。
工厂方法模式的结构
工厂方法模式的结构如图所示。
从图可以看出,这个使用了工厂方法模式的系统涉及到以下的角色:
抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。在图2-2-2中,这个角色由接口Creator扮演;在实际的系统中,这个角色也经常用抽象类来实现。
具体工厂(ConcreteCreator)角色:担任这个角色的是实现了抽象工厂接口的具体Java类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。在图2-2-2中给出了两个这样的角色,也就是具体Java类Concretecreatorl和ConcreteCreatcr2。
抽象产品(Product)角色:工厂方法模式所创建对象即产品对象的共同父类或共同拥有的接口。在图2-2-2中,这个角色为接口Product。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所声明的接口。工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。在图2-2-2中,这个角色由具体类ConcreteProductl和ConcreteProdu