软件设计模式之创建型模式_第1页
软件设计模式之创建型模式_第2页
软件设计模式之创建型模式_第3页
软件设计模式之创建型模式_第4页
软件设计模式之创建型模式_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件设计模式之创建型模式创建型模式概述单例模式工厂方法模式抽象工厂模式建造者模式原型模式contents目录01创建型模式概述定义:创建型模式主要关注对象的创建过程,旨在将对象的创建与使用代码分离,提供灵活的对象创建方式。抽象了对象创建的细节,使得代码更加清晰和易于维护。提供了多种创建对象的方式,增加了系统的灵活性和可扩展性。特点定义与特点解耦将对象的创建与使用代码分离,降低了系统的耦合度。复用通过抽象创建过程,可以方便地复用已有的对象创建逻辑。扩展性提供了可扩展的框架,方便在系统中添加新的对象创建方式。创建型模式的重要性0102单例模式(Single…确保一个类仅有一个实例,并提供一个全局访问点。工厂方法模式(Fact…定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。抽象工厂模式(Abst…提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。建造者模式(Build…将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。原型模式(Protot…用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。030405创建型模式的分类02单例模式饿汉式在类加载时就完成了初始化,避免了线程同步问题。双重检查锁定通过双重检查锁定机制实现线程安全的懒汉式单例模式。枚举利用枚举的特性实现单例模式,简洁且线程安全。定义单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。懒汉式在第一次调用时初始化,需要考虑线程安全问题。静态内部类利用静态内部类的特性实现延迟加载和线程安全。010203040506定义与实现方式延迟加载,即在第一次使用时才创建实例。优点是按需加载,缺点是存在线程安全问题。在类加载时就创建实例。优点是线程安全,缺点是无论是否使用都会创建实例,浪费资源。懒汉式与饿汉式的比较饿汉式懒汉式线程安全问题及解决方案使用synchronized关键字对方法进行同步,确保同一时间只有一个线程可以访问该方法。解决方案问题:在懒汉式实现中,如果多个线程同时访问单例类的静态方法,可能会创建多个实例,从而破坏单例模式的约束。使用双重检查锁定机制,在同步块内外分别检查实例是否已经创建,避免不必要的同步开销。使用静态内部类或枚举实现单例模式,这些方式天然具有线程安全性。应用场景与示例应用场景数据库连接池、线程池等资源池类设计。日志记录器、配置管理类、全局状态类等需要全局唯一实例的场景。数据库连接池:通过单例模式确保整个应用只有一个数据库连接池实例,避免资源浪费和连接泄露。日志记录器:通过单例模式确保整个应用使用同一个日志记录器实例,方便统一管理和控制日志输出。示例03工厂方法模式定义工厂方法模式是一种创建型设计模式,它提供了一种创建对象的接口,但具体创建的对象类型可以在子类中进行指定。实现方式在工厂方法模式中,通常抽象出一个工厂类,该类声明了创建对象的方法,但具体实现留给子类完成。子类通过实现这个方法,来指定具体要创建的对象类型。定义与实现方式123优点实现了创建对象与使用对象的分离,降低了系统的耦合度。具有良好的扩展性,当需要增加新的产品时,只需要增加相应的具体工厂和具体产品类即可。工厂方法模式的优缺点符合开闭原则,对扩展开放,对修改关闭。工厂方法模式的优缺点03有时可能需要引入抽象层,增加了实现的复杂性。01缺点02增加了系统的类个数,一定程度上增加了系统的复杂性和理解难度。工厂方法模式的优缺点简单工厂模式是通过一个专门的类来负责创建其他类的实例,这个专门的类称为“工厂类”。客户端只需要知道这个工厂类,而不需要知道具体的产品类。但是简单工厂模式违反了开闭原则,当需要增加新的产品时,需要修改工厂类的代码。简单工厂模式工厂方法模式是对简单工厂模式的进一步抽象化,它克服了简单工厂模式中违反开闭原则的缺点,又保持了封装对象创建过程的优点。在工厂方法模式中,客户端需要知道具体工厂类才能创建对象,这增加了客户端的复杂性,但是提高了系统的可扩展性。工厂方法模式与简单工厂模式的比较应用场景当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。应用场景与示例当需要将创建对象的职责委托给多个帮助子类中的某一个,以便客户端可以使用子类来指定创建对象的具体类型的时候。示例:以汽车制造为例,可以抽象出一个汽车工厂接口`CarFactory`,其中声明了制造汽车的方法`createCar()`。然后针对不同的汽车品牌(如宝马、奔驰等),分别实现这个接口,并在实现类中指定具体的汽车类型。客户端在使用时,只需要知道具体的汽车工厂,就可以制造出相应的汽车。应用场景与示例04抽象工厂模式VS抽象工厂模式是一种创建型设计模式,它提供了一种方式来封装一组具有共同主题的单个工厂,而不需要指定它们的具体类。实现方式抽象工厂模式通常通过定义一个抽象工厂接口来实现,该接口声明了一组用于创建相关或依赖对象的工厂方法。然后,具体工厂类实现该接口以提供具体的产品对象。客户端代码通过调用抽象工厂的方法来获取产品对象,而无需了解具体产品类的信息。定义定义与实现方式抽象工厂模式的优缺点封装性抽象工厂模式将具体产品的创建过程封装在工厂类中,客户端代码无需了解具体产品的实现细节,降低了系统的耦合度。可扩展性当需要增加新的产品族时,只需增加新的具体工厂类和对应的具体产品类,而无需修改现有代码,符合开闭原则。抽象工厂模式的优缺点一致性:抽象工厂模式可以确保客户端始终使用同一产品族中的产品,保证了系统的一致性。抽象工厂模式的优缺点抽象工厂模式对于支持新种类的产品较为困难,因为需要修改抽象工厂的接口以及所有具体工厂的实现。难以支持新种类的产品当产品族中产品种类较多时,会导致系统复杂度增加,因为需要维护大量的具体工厂类和具体产品类。系统复杂度增加不同点工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构。抽象工厂模式比工厂方法模式更加复杂,因为它需要处理多个产品族和产品等级结构的问题。工厂方法模式的具体工厂类负责创建一个具体产品,而抽象工厂模式的具体工厂类负责创建一组相关或依赖的产品。共同点:两种模式都属于创建型设计模式,都用于创建对象,且都降低了客户端代码与具体产品类之间的耦合度。与工厂方法模式的比较应用场景当系统需要提供多个产品族,且每个产品族包含多个相关产品时,可以使用抽象工厂模式。当系统需要根据不同的环境或条件创建不同种类的产品时,可以使用抽象工厂模式。示例:以汽车制造为例,一个汽车制造厂可能生产多种类型的汽车(如轿车、SUV等),每种类型的汽车又有不同的配置(如发动机、轮胎等)。这时可以使用抽象工厂模式来设计汽车制造系统。具体实现时,可以定义一个抽象汽车工厂接口,声明创建各种类型汽车的方法;然后实现多个具体汽车工厂类,分别负责创建不同配置的汽车;最后客户端代码通过调用抽象汽车工厂的方法来获取所需的汽车对象。应用场景与示例05建造者模式定义建造者模式是一种创建型设计模式,它允许你在构建复杂对象时分步进行,并且可以在构建过程中更改对象的表示。要点一要点二实现方式建造者模式通常包括四个主要组成部分:产品(Product)、抽象建造者(AbstractBuilder)、具体建造者(ConcreteBuilder)和导演(Director)。其中,产品是要构建的对象,抽象建造者定义了构建产品所需的接口,具体建造者实现了抽象建造者的接口以构建产品,而导演则负责协调具体建造者的工作以构建出最终的产品。定义与实现方式建造者模式的优缺点01优点02可以分步构建复杂对象,使得构建过程更加清晰和易于理解。可以方便地更改对象的表示,因为对象的构建过程被封装在了具体建造者中。03建造者模式的优缺点如果产品的内部结构非常复杂,那么需要定义很多具体的建造者类,这会增加系统的复杂性。如果产品的构建过程需要依赖于其他对象,那么需要在具体建造者中注入这些依赖,这可能会增加构建的复杂性。缺点建造者模式的优缺点两种模式都是创建型模式,都用于创建对象。抽象工厂模式用于创建一系列相关或互相依赖的对象,而不需要指定它们具体的类;而建造者模式则用于构建复杂对象,并且可以在构建过程中更改对象的表示。相似之处不同之处与抽象工厂模式的比较当需要构建的对象比较复杂,且构建过程需要分步骤进行时,可以考虑使用建造者模式。例如,构建一个包含多个部件的复杂设备或构建一个包含多个字段的复杂数据结构。应用场景以构建一个包含多个字段的复杂数据结构为例,可以使用建造者模式来分步构建该数据结构。首先定义一个抽象建造者接口,该接口包含构建数据结构所需的方法;然后定义一个具体建造者类来实现该接口,并在该类中分步构建数据结构;最后定义一个导演类来协调具体建造者的工作,以构建出最终的数据结构。客户端可以通过调用导演类的方法来获取构建好的数据结构。示例应用场景与示例06原型模式定义原型模式是一种创建型设计模式,它允许通过复制(或克隆)一个已有对象来创建一个新对象,而无需重新实例化。实现方式在原型模式中,通常需要实现一个原型接口或抽象类,其中包含一个克隆方法。具体原型类实现该接口或抽象类,并实现克隆方法以返回一个新对象。客户端可以通过调用原型对象的克隆方法来创建新对象。定义与实现方式010405060302优点提高性能:通过复制已有对象来创建新对象,避免了重新实例化的开销。简化创建过程:客户端无需了解对象的创建细节,只需调用克隆方法即可。缺点深拷贝问题:当对象包含引用类型属性时,需要实现深拷贝以确保克隆对象的独立性。破坏封装性:客户端可以访问并修改原型对象的内部状态,可能导致封装性被破坏。原型模式的优缺点浅拷贝只复制对象的基本数据类型属性,对于引用类型属性则只复制引用。因此,浅拷贝得到的对象与原对象共享引用类型属性。深拷贝不仅复制对象的基本数据类型属性,还递

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论