设计模式之创建模式

来源:互联网 发布:淘宝店铺主营在哪设置 编辑:程序博客网 时间:2024/06/06 23:27

概述

设计模式主要分为三大类,分别是创建型、结构型、行为型。本篇主要介绍创建型设计模式。

创建型模式的分类

简单工厂模式

  • 定义
    简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
  • 类图
    类图
    类图
    时序图
    时序图
  • 举例子
    1. JDK中工具类java.text.DateFormat
  • 优点
    1. 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端调用不必关心如何创建对象,只需要给相应的初始参数。
    2. 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。
  • 缺点
    1. 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
    2. 在系统类较多的时候,增加了创建的复杂性与难以维护性。
  • 应用场景
    1. 工厂类负责创建的对象比较少
    2. 客户端只知道传入工厂类的参数,对于如何创建对象不关心

工厂方法模式

  • 定义
    工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品
  • 类图
    这里写图片描述
    1. 抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
    2. 具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
    3. 抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
    4. 具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
  • 举例子
    1. 简单工厂模式创建的实例,是有一定共性的。比如说家禽,鸡、鸭、鹅都是具有相同的特点。
  • 优点
    1. 在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的类名。
    2. 在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。
  • 缺点
    1. 每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖
  • 应用场景
    1. 一个类不知道它所需要的对象的类。在工厂方法模式中,我们不需要具体产品的类名,我们只需要知道创建它的具体工厂即可。
    2. 一个类通过其子类来指定创建那个对象。在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。
    3. 将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定。

抽象工厂模式

  • 定义
    抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。
  • 类图
    这里写图片描述
  • 举例子
  • 优缺点
  • 应用场景

建造者模式

  • 定义
  • 类图
  • 举例子
  • 优缺点
  • 应用场景

单例模式

  • 定义
  • 类图
  • 举例子
  • 优缺点
  • 应用场景