版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计模式之创建模式,课程目标,创建型模式概述 各种创建型模式的介绍 各种创建型模式的结构图 各种创建型模式的示例 各种创建型模式的优缺点,体验项目,比如要求开发一个界面程序,该界面中包含有按钮、文本框等控件,要求按钮、文本框等控件,并希望能够按使用者的要求显示不同的风格。,该项目使用抽象工厂(Abstract Factory)模式来处理按钮、文本框等的不同风格,程序中类之间的关系如图所示:,Factory是一个抽象工厂,定义了createButtonFace()和createTextFace()两个抽象方法。,ModernFactory是Factory的一个具体实现,它负责实例化ModernB
2、utton和ModernText对象。,ClassicalFactory是Factory的另一个具体实现,它负责实例化ClassicalButton和ClassicalText对象。,ModernButton和ClassicalButton类是ButtonFace的子类,分别代表按钮的不同风格,ModernText和ClassicalText类是TextFace的子类,分别代表文本框的不同风格。,创建型模式概述,什么是创建型模式,创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。,创建型模式关注的是对象的创建,创建型模式将创建对象的过程进
3、行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。,所有的创建型模式都有两个永恒的主旋律:,它们都将系统使用的哪些具体类的信息封装起来,它们隐藏了这些类的实例是如何被创建和组织的,为什么需要创建型模式,由于设计模式的原则,面向接口进行编程,而不是实现。,名称必须是构造函数,名称受限。,传统的创建,每次创建都会返回一个新的对象,然而在实际项目中需要某一个类仅创建一个实例,来反复使用已经创建的对象。,传统的创建中构造函数返回的类型都是具体的类型,而使用工厂模式可以返回其子类型。,主要有以下几个方面的原因:,动态地确定创建哪些对象。,是
4、谁创建这些对象,即是外部的对象,还是本身对象提供,或者静态的类继承。,动态决定怎样创建对象,是新建对象或是使用Cache,还是复制某个对象。,决定怎样组合或者表示这些对象。,在实际的系统中使用创建型模式创建对象时需要考虑到以下几点:,Abstract Factory 模式,抽象工厂(Abstract Factory)模式又称为Kit模式,属于对象创建型模式,它拥有比简单工厂模式和工厂方法模式更高的抽象性,是所有工厂模式中最为抽象和最具一般性的形态。抽象工厂模式是一种重要的架构型组件(Architectural Component),它负责提供统一的接口,用来生成一簇“相互关联”或者“相互依赖”
5、的多态对象(Polymorphic Object)。 抽象工厂模式的一个主要功能是它能够隔离要生成的具体产品类,由于这些类的实际类名都被隐藏在工厂里面,因此客户端根本不需要关心对它们进行实例化的细节。,模式介绍,Abstract Factory 模式结构图,抽象工厂模式结构图如下:,AbstractFactory:是抽象工厂模式的核心,它负责定义创建抽象产品对象的接口。任何在模式中用于创建具体产品对象的工厂类都必须从抽象工厂派生,并且实现由它所定义的所有工厂方法。,ConcreteFactory:是抽象工厂模式的对外接口,它负责实现创建具体产品对象的内部逻辑。具体工厂与应用密切相关,可以被外界
6、直接调用,创建所需要的产品。,AbstractProduct:是抽象工厂模式所创建的某一类产品对象的抽象父类,它负责描述某些具体产品所共有的公共接口。,ConcreteProduct(如ProductA ,ProductB):是抽象工厂模式的创建目标,所有创建的对象都是充当这一角色的某个具体产品类的实例。,Abstract Factory 模式示例,public abstract class AbstractFactory public abstract Banditi createBanditi(); public abstract Police createPolice(); public
7、 class HardToyFactory extends AbstractFactory public Banditi createBanditi()return new HardBanditi(); public Police createPolice()return new HardPolice(); public class SimpToyFactory extends AbstractFactory public Banditi createBanditi()return new SimpBanditi(); public Police createPolice()return ne
8、w SimpPolice(); public abstract class Police public abstract void policeAttack(); public abstract void policeMove(); public abstract class Banditi public abstract void banditiAttack(); public abstract void banditiMove(); public class SimpPolice extends Police public void policeAttack() System.out.pr
9、intln(初等级别玩具游戏中的CS战警攻击); public void policeMove() System.out.println(初等级别玩具游戏中的CS战警移动); public class HardPolice extends Police public void policeAttack() System.out.println(高等级别玩具游戏中的CS战警攻击); public void policeMove() System.out.println(高等级别玩具游戏中的CS战警移动); ,Abstract Factory 模式优势和不足,该模式有如下好处: Abstract
10、Factory 处理应用程序中对象的创建。客户通过它可以不用直接与具体产品对象的实现打交道。只需要知道具体的Factory 就可以生成出系统所需要的对象。应用程序改变产品族容易。有助于系统中产品的一致性。该模式下应用程序中使用的产品肯定是一个具体工厂生产出来的。,抽象工厂模式的缺点: 在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品,这是因为AbstractFactory接口规定了所有可能被创建的产品集合,要支持新种类的产品就需要对该接口进行扩展,而这将涉及到对AbstractFactory及其所有子类的修改。,Builder模式,Builder模式即建造模式或生成器模式,用于将一个复
11、杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。并且用户不知道内部的具体构建细节。,模式介绍,主要适用于以下情况:,当构造过程必须允许被构造的对象有不同的表示时;,当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时。,Builder模式结构图,建造模式结构图如下:,Builder(抽象生成器):为要创建Product对象的各个组成部件指定抽象接口。,ConcreteBuilder(具体生成器):实现Builder接口来构造和装配该产品的各个部件。,Dir
12、ector(导向器):构造一个使用Builder接口的对象。,Product(产品):表示被构造的复杂对象。,Builder模式示例,public abstract class Builder /创建部件,比如创建处理器 public abstract void builderProcessor(String partA); /创建部件,比如主板 public abstract void builderMainBoard(String partB); /创建部件,比如创建显示器 public abstract void builderDisplay(String partC); /*返回最后组
13、装成品结果,即组装好的电脑, 下面我们将以字符串作为返回的产品。 实现过程和部件成品的组装过程不在这里进行, 而是转移到下面的Director类中进行。 */ public abstract String getResult(); public class Director Builder builder; public Director(Builder builder) this.builder=builder; public void construct( ) builder.builderProcessor(处理器); builder.builderMainBoard(主板); buil
14、der.builderDisplay(显示器); public class ConcreteBuilder extends Builder String product=; public void builderProcessor(String processor) product+=组装+processor+n; public void builderMainBoard(String mainBoard) product+=组装+mainBoard+n; public void builderDisplay(String display) product+=组装+display; publi
15、c String getResult() return product; ,Builder模式优势和不足,Builder模式的优势: (1)使你可以改变一个产品的内部表示。Builder对象提供给导向器一个构造产品的抽象类,该抽象类使得生成器隐藏该产品的表示和结构,因为产品是通过抽象类构造的,那么你在改变产品的内部表示时,只需要重新定义一个新的生成器。 (2)它使你对产品的构造过程可以进行更精细的控制。Builder模式是在导向器的控制下,一步一步构造产品的。因此Builder模式能很好的反映产品的构造过程,这就使得你可以更精细的控制产品的构造过程。,缺点: Abstract Factory模
16、式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。,Factory Method模式,Factory Method模式即工厂方法模式,它定义了一个创建对象的抽象类(接口),但是却让子类来决定具体实例化哪一个类。当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时,我们就需要用到Factory Method模式了。Factory Method可以根据不同的条件产生不同的实例,但这些不同的实例通常是属于相同的类型,并具有共同的父类。,模式介绍,比如JFC中的BorderFactory就是一个很好的例子,BorderFactory提供标准Border对象
17、的工厂类。在任何可能的地方,此工厂类都将提供对已共享Border实例的引用。,Factory Method模式结构图,工厂方法模式结构图如下:,Product:需要创建的产品的抽象类。,ConcreteProduct:Product类的具体实现,一系列具体的产品。,Creator:抽象创建器接口,声明工厂方法,返回Product类型对象。,ConcreteCreator:具体的创建器,重写Creator中的factoryMethod()方法,返回ConcreteProduct类型的实例。,Factory Method模式示例,public abstract class TeacherProdu
18、ct public abstract void teach( ); public abstract void erase( ); public String bookName; public TeacherProduct(String bookName) this.bookName=bookName; public abstract class TeacherFactory protected abstract TeacherProduct factoryMethod(String bookName); / 在anOperation中定义老师实例的一系列行为 public void anOpe
19、ration(String bookName) TeacherProduct teacher= factoryMethod(bookName); System.out.println(招聘了一个老师,老师所属科目是:+bookName); teacher.teach(); teacher.erase(); public class ChineseTeacherFactory extends TeacherFactory protected TeacherProduct factoryMethod(String bookName) return new ChineseTeacher(bookNa
20、me); public class MathTeacherFactory extends TeacherFactory protected TeacherProduct factoryMethod(String bookName) return new MathTeacher(bookName); ,Factory Method模式优势和不足,Builder模式的优势: (1)基于工厂角色和产品角色的多态性,设计是工厂方法模式的关键,它使得工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。 (2)在系统中加入新产品时,不需要对抽象工厂和抽象产品提供的接口进行修
21、改,而只要添加一个具体工厂和具体产品就可以了。,缺点 在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,当两者都比较简单时,系统的额外开销相对也会较大。,Prototype模式,Prototype模式即原型模式,原型模式其实是一个比较单纯的设计模式,其目的就是利用一个原型对象,快速地生成一批对象,从而避免重复的新建过程。 工作原理是:通过将一个原型对象传给一个要新建的对象,新建对象通过请求原型对象拷贝它们,然后自己来实施创建。,模式介绍,主要适用于以下情况:,构建函数相对比较复杂。,构建函数不能被不相关的人调用。,一批对象中绝大部分对象的属性一致,而只有极少数不同。,P
22、rototype模式结构图,原型模式结构图如下:,Prototype:声明一个克隆自身的接口或抽象类。,ConcretrPrototype:实现一个克隆自身的操作。,Client:让一个原型来克隆自身从而创建一个新的对象。,Prototype模式示例,import java.awt.*; public class Client public static void main(String args) BilliardsPrototype billiard1=new BilliardsPrototype(); BilliardsPrototype billiard2=(BilliardsProt
23、otype)billiard1.clone(); BilliardsPrototype billiard3=(BilliardsPrototype)billiard1.clone(); billiard1.setBilliardColor(Color.BLUE); billiard1.setBilliardName(1); System.out.println(billiard1.getBilliardName()+号,蓝色创建成功); billiard2.setBilliardColor(Color.red); billiard2.setBilliardName(5); System.out
24、.println(billiard2.getBilliardName()+号,红色创建成功); billiard3.setBilliardColor(Color.red); import java.awt.*; public class BilliardsPrototype implements Cloneable String billiardName; Color billiardColor; public void setBilliardName(String billiardName) this.billiardName = billiardName; public String ge
25、tBilliardName() return this.billiardName; public void setBilliardColor(Color billiardColor) this.billiardColor = billiardColor; public Color getBilliardColor() return this.billiardColor; public Object clone() Object object = null; try object =super.clone(); catch (CloneNotSupportedException e)System
26、.out.println(e); return object; ,Prototype模式优势和不足,Prototype模式主要有以下几点优势:,Prototype模式允许客户只通过注册原型实例就可以将一个具体产品类加入到系统中,客户可以在运行时建立和删除原型。,减少了子类构造,Prototype模式是克隆一个原型而不是请求工厂方法创建一个原型,所以它不需要一个与具体产品类平行的Creater类层次。,Portotype模式具有给一个应用软件动态加载新功能的能力。,产品类不需要非得有任何事先确定的等级结构,因为Prototype模式适用于任何的等级结构。,在有些情况下克隆功能不容易实现,特别是遇
27、到对象的循环引用时。而且一个类必须配备一种克隆方法。这种克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。,Prototype模式不足,Singleton模式,主要适用于以下情况:,当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。,当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。,实现要点及其注意的问题,Singleton模式是限制而不是改进类的创建。,Singleton中的实例构造器可以设置为protected以允许子类派生。,Singleton模式一般不要支持Cloneable接
28、口 和序列化。,Singleton只考虑了对象创建的管理,没有考虑到销毁的管理 。,理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。,可以很简单的修改一个Singleton,使它有少数几个实例,这样做是允许的而且是有意义的。,Singleton模式结构图,单例模式结构图如下:,Singleton:定义一个instance( )方法,允许客户端访问它的唯一实例。还负责创建它的唯一实例。,Singleton模式示例,比如在连接数据库时,就希望数据库连接对象受到一定的限制,必须保持同一时间只能有一个连接的存在,使用单例模式就可以很好的完成这一功能。,import java.sql.*; public class Singleton private static Singleton s=null; Connec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年家具行业品牌塑造与顾客体验研究报告
- 2026年食药用菌产业技术创新路径探索报告
- 2026年新能源充电桩行业发展趋势与市场规模报告
- 2026年即时消费模式下的外卖行业报告及市场展望
- 2026年人工智能行业报告及AI技术应用趋势
- 2026年文化旅游产业政策分析报告及未来五年市场前景
- 2026年新能源汽化器技术革新报告
- 2026年智慧医疗行业创新策略报告
- 2026年大数据行业市场规模及增长趋势报告
- 2026年陶瓷行业报告:设计软件在陶瓷产品设计中的应用与趋势
- 《电力消防安全培训》课件
- 《土木工程智能施工》课程教学大纲
- 河北美术版小学六年级上册书法练习指导教案
- 承包建房的合同书
- 《管理会计》说课及试讲
- 中医师承协议模板
- DL-T573-2021电力变压器检修导则
- 部编版一到六年级(12册)日积月累汇总
- 飘窗渗水修补施工方案范本
- 江苏2022年江苏农商行省联社校园招聘考试参考题库含答案详解
- 电子教程pdms中文培训手册详细
评论
0/150
提交评论