软件设计模式之创建型模式.ppt

上传人:sccc 文档编号:5412846 上传时间:2023-07-04 格式:PPT 页数:30 大小:3.36MB
返回 下载 相关 举报
软件设计模式之创建型模式.ppt_第1页
第1页 / 共30页
软件设计模式之创建型模式.ppt_第2页
第2页 / 共30页
软件设计模式之创建型模式.ppt_第3页
第3页 / 共30页
软件设计模式之创建型模式.ppt_第4页
第4页 / 共30页
软件设计模式之创建型模式.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《软件设计模式之创建型模式.ppt》由会员分享,可在线阅读,更多相关《软件设计模式之创建型模式.ppt(30页珍藏版)》请在三一办公上搜索。

1、设计模式之创建模式,http:/,课程目标,创建型模式概述 各种创建型模式的介绍 各种创建型模式的结构图 各种创建型模式的示例 各种创建型模式的优缺点,体验项目,比如要求开发一个界面程序,该界面中包含有按钮、文本框等控件,要求按钮、文本框等控件,并希望能够按使用者的要求显示不同的风格。,该项目使用抽象工厂(Abstract Factory)模式来处理按钮、文本框等的不同风格,程序中类之间的关系如图所示:,Factory是一个抽象工厂,定义了createButtonFace()和createTextFace()两个抽象方法。,ModernFactory是Factory的一个具体实现,它负责实例化

2、ModernButton和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 AbstractFactorypublic abstract Banditi createBanditi();public abstract Police createPolice();publ

7、ic class HardToyFactory extends AbstractFactorypublic Banditi createBanditi()return new HardBanditi();public Police createPolice()return new HardPolice();public class SimpToyFactory extends AbstractFactorypublic Banditi createBanditi()return new SimpBanditi();public Police createPolice()return new S

8、impPolice();public abstract class Policepublic 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.println(初等级别

9、玩具游戏中的CS战警攻击);public void policeMove()System.out.println(初等级别玩具游戏中的CS战警移动);public class HardPolice extends Policepublic void policeAttack()System.out.println(高等级别玩具游戏中的CS战警攻击);public void policeMove()System.out.println(高等级别玩具游戏中的CS战警移动);,Abstract Factory 模式优势和不足,该模式有如下好处:Abstract Factory 处理应用程序中对象的创

10、建。客户通过它可以不用直接与具体产品对象的实现打交道。只需要知道具体的Factory 就可以生成出系统所需要的对象。应用程序改变产品族容易。有助于系统中产品的一致性。该模式下应用程序中使用的产品肯定是一个具体工厂生产出来的。,抽象工厂模式的缺点:在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品,这是因为AbstractFactory接口规定了所有可能被创建的产品集合,要支持新种类的产品就需要对该接口进行扩展,而这将涉及到对AbstractFactory及其所有子类的修改。,Builder模式,Builder模式即建造模式或生成器模式,用于将一个复杂对象的构建与它的表示分离,使得同样的构

11、建过程可以创建不同的表示。Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。并且用户不知道内部的具体构建细节。,模式介绍,主要适用于以下情况:,当构造过程必须允许被构造的对象有不同的表示时;,当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时。,Builder模式结构图,建造模式结构图如下:,Builder(抽象生成器):为要创建Product对象的各个组成部件指定抽象接口。,ConcreteBuilder(具体生成器):实现Builder接口来构造和装配该产品的各个部件。,Director(导向器):构造一个使用Bui

12、lder接口的对象。,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(主板);builder.builderDisplay(显示器);public class C

14、oncreteBuilder extends BuilderString product=;public void builderProcessor(String processor)product+=组装+processor+n;public void builderMainBoard(String mainBoard)product+=组装+mainBoard+n;public void builderDisplay(String display)product+=组装+display;public String getResult()return product;,Builder模式优势

15、和不足,Builder模式的优势:(1)使你可以改变一个产品的内部表示。Builder对象提供给导向器一个构造产品的抽象类,该抽象类使得生成器隐藏该产品的表示和结构,因为产品是通过抽象类构造的,那么你在改变产品的内部表示时,只需要重新定义一个新的生成器。(2)它使你对产品的构造过程可以进行更精细的控制。Builder模式是在导向器的控制下,一步一步构造产品的。因此Builder模式能很好的反映产品的构造过程,这就使得你可以更精细的控制产品的构造过程。,缺点:Abstract Factory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。,Factory Metho

16、d模式,Factory Method模式即工厂方法模式,它定义了一个创建对象的抽象类(接口),但是却让子类来决定具体实例化哪一个类。当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时,我们就需要用到Factory Method模式了。Factory Method可以根据不同的条件产生不同的实例,但这些不同的实例通常是属于相同的类型,并具有共同的父类。,模式介绍,比如JFC中的BorderFactory就是一个很好的例子,BorderFactory提供标准Border对象的工厂类。在任何可能的地方,此工厂类都将提供对已共享Border实例的引用。,Factory Metho

17、d模式结构图,工厂方法模式结构图如下:,Product:需要创建的产品的抽象类。,ConcreteProduct:Product类的具体实现,一系列具体的产品。,Creator:抽象创建器接口,声明工厂方法,返回Product类型对象。,ConcreteCreator:具体的创建器,重写Creator中的factoryMethod()方法,返回ConcreteProduct类型的实例。,Factory Method模式示例,public abstract class TeacherProduct public abstract void teach();public abstract void

18、 erase();public String bookName;public TeacherProduct(String bookName)this.bookName=bookName;public abstract class TeacherFactory protected abstract TeacherProduct factoryMethod(String bookName);/在anOperation中定义老师实例的一系列行为public void anOperation(String bookName)TeacherProduct teacher=factoryMethod(bo

19、okName);System.out.println(招聘了一个老师,老师所属科目是:+bookName);teacher.teach();teacher.erase();public class ChineseTeacherFactory extends TeacherFactoryprotected TeacherProduct factoryMethod(String bookName)return new ChineseTeacher(bookName);public class MathTeacherFactory extends TeacherFactoryprotected Te

20、acherProduct factoryMethod(String bookName)return new MathTeacher(bookName);,Factory Method模式优势和不足,Builder模式的优势:(1)基于工厂角色和产品角色的多态性,设计是工厂方法模式的关键,它使得工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。(2)在系统中加入新产品时,不需要对抽象工厂和抽象产品提供的接口进行修改,而只要添加一个具体工厂和具体产品就可以了。,缺点在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,当两者都比较简单时,系统的

21、额外开销相对也会较大。,Prototype模式,Prototype模式即原型模式,原型模式其实是一个比较单纯的设计模式,其目的就是利用一个原型对象,快速地生成一批对象,从而避免重复的新建过程。工作原理是:通过将一个原型对象传给一个要新建的对象,新建对象通过请求原型对象拷贝它们,然后自己来实施创建。,模式介绍,主要适用于以下情况:,构建函数相对比较复杂。,构建函数不能被不相关的人调用。,一批对象中绝大部分对象的属性一致,而只有极少数不同。,Prototype模式结构图,原型模式结构图如下:,Prototype:声明一个克隆自身的接口或抽象类。,ConcretrPrototype:实现一个克隆自身

22、的操作。,Client:让一个原型来克隆自身从而创建一个新的对象。,Prototype模式示例,import java.awt.*;public class Client public static void main(String args)BilliardsPrototype billiard1=new BilliardsPrototype();BilliardsPrototype billiard2=(BilliardsPrototype)billiard1.clone();BilliardsPrototype billiard3=(BilliardsPrototype)billiard

23、1.clone();billiard1.setBilliardColor(Color.BLUE);billiard1.setBilliardName(1);System.out.println(billiard1.getBilliardName()+号,蓝色创建成功);billiard2.setBilliardColor(Color.red);billiard2.setBilliardName(5);System.out.println(billiard2.getBilliardName()+号,红色创建成功);billiard3.setBilliardColor(Color.red);imp

24、ort java.awt.*;public class BilliardsPrototype implements CloneableString billiardName;Color billiardColor;public void setBilliardName(String billiardName)this.billiardName=billiardName;public String getBilliardName()return this.billiardName;public void setBilliardColor(Color billiardColor)this.bill

25、iardColor=billiardColor;public Color getBilliardColor()return this.billiardColor;public Object clone()Object object=null;try object=super.clone();catch(CloneNotSupportedException e)System.out.println(e);return object;,Prototype模式优势和不足,Prototype模式主要有以下几点优势:,Prototype模式允许客户只通过注册原型实例就可以将一个具体产品类加入到系统中,客

26、户可以在运行时建立和删除原型。,减少了子类构造,Prototype模式是克隆一个原型而不是请求工厂方法创建一个原型,所以它不需要一个与具体产品类平行的Creater类层次。,Portotype模式具有给一个应用软件动态加载新功能的能力。,产品类不需要非得有任何事先确定的等级结构,因为Prototype模式适用于任何的等级结构。,在有些情况下克隆功能不容易实现,特别是遇到对象的循环引用时。而且一个类必须配备一种克隆方法。这种克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事。,Prototype模式不足,Singleton模式,主要适用于以下

27、情况:,当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。,当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。,实现要点及其注意的问题,Singleton模式是限制而不是改进类的创建。,Singleton中的实例构造器可以设置为protected以允许子类派生。,Singleton模式一般不要支持Cloneable接口 和序列化。,Singleton只考虑了对象创建的管理,没有考虑到销毁的管理。,理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的构造器的任意调用”。,可以很简单的修改一个Singleton,使它有少数几

28、个实例,这样做是允许的而且是有意义的。,Singleton模式结构图,单例模式结构图如下:,Singleton:定义一个instance()方法,允许客户端访问它的唯一实例。还负责创建它的唯一实例。,Singleton模式示例,比如在连接数据库时,就希望数据库连接对象受到一定的限制,必须保持同一时间只能有一个连接的存在,使用单例模式就可以很好的完成这一功能。,import java.sql.*;public class Singleton private static Singleton s=null;Connection con;private Singleton()tryString cl

29、assforname=com.microsoft.jdbc.sqlserver.SQLServerDriver;String url=jdbc:microsoft:sqlserver:/localhost:1433;databasename=pubs;Class.forName(classforname);con=DriverManager.getConnection(url,sa,);catch(Exception e)System.out.println(e);public static Singleton getInstance()if(s=null)s=new Singleton();

30、return s;,这种方式的实现对于线程来说并不是安全的,另一种方式是在static 后加synchronized就是对于线程安全的,Singleton模式优势和不足,Singleton模式主要有以下几点优势:,对唯一实例的受控访问。,自行实例化并向整个系统提供这个实例单例模式。,Singleton模式不足,可能的开发混淆,开发人员必须记住自己不能使用new关键字实例化对象。,对象的生存期问题,实践项目,程序的实现要求如下:(1)创建抽象工厂类Factory。(2)ModernFactory和 ClassicalFactory是Factory的具体实现,分别负责实例化ModernButton和ModernText对象、ClassicalButton和ClassicalText对象。(3)创建ModernButton、ClassicalButton和ButtonFace类,ModernButton和ClassicalButton类是ButtonFace类的子类。创建ModernText、ClassicalText和TextFace类,ModernText和ClassicalText类是TextFace类的子类。,本章总结,创建型模式概述 各种创建型模式的介绍 各种创建型模式的结构图 各种创建型模式的示例 各种创建型模式的优缺点,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号