JAVA设计模式 - 创建型模式总结

JAVA设计模式 - 单例模式

JAVA设计模式 - 工厂方法模式

JAVA设计模式 - 抽象工厂模式

JAVA设计模式 - 原型模式

JAVA设计模式 - 建造者模式

1 . 创建型模式的定义

    顾名思义就是创建对象的模式 , 创建型模式抽象了实例化的过程 . 它们帮助一个系统独立于如何创建 , 组合和表示它的那些对象 . 一个类创建型模式使用继承改变被实例化的类 , 而一个对象创建型模式将实例化委托给另一个对象 . 

    简单来说 , 就是改变原来哪种只有new创建对象的方式 , 用一些更优雅更解耦更容易扩展的方式进行实例对象的获取 . 

    使用创建者模式是为了提高系统的可维护性和可扩展性 , 提高应对需求变化的能力 . 

2 . 创建型模式分类概述

    创建型模式共有5种 , 单例模式 , 工厂方法模式(简单工厂模式) , 抽象工厂模式 , 原型模式 , 建造者模式
    在这些模式中有两个不断出现的主旋律 . 第一 , 它们都将关于该系统使用哪些具体的类的信息封装起来 . 第二 , 它们隐藏了这些类的实例是如何被创建和放在一起的 . 整个系统关于这些对象所知道的是由抽象类所定义的接口 . 因此 , 创建型模式在什么时候被创建 , 由谁创建 , 怎样被创建 , 以及创建什么这些方面给予了我们很大的灵活性 . 它们允许你用结构和功能差别很大的"产品"对象配置一个系统 . 配置可以是静态的 , 也可以是动态的 . 

3 . 工厂模式间的关系

  • 工厂方法模式是简单工厂模式的扩展 , 由于使用了多态性 , 工厂方法模式保持了简单工厂模式的优点 , 而且克服了它的缺点 . 如果只有一个具体工厂类 , 工厂方法模式可以改造为简单工厂模式 . 
  • 抽象工厂经常用工厂方法来实现 . 
  • 抽象工厂模式是对象的创建模式 , 是工厂方法模式的进一步推广 . 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态 . 
  • 工厂方法模式针对的是一个产品等级结构 ; 抽象工厂模式需要面对多个产品等级结构 . 

4 . 创建型模式的应用场景

    面对上述五种创建型模式 , 在实际的开发过程中 , 我们将如何选择最适合的模式呢 ? 

    当然 , 影响因素有很多 , 这需要我们学会去权衡各个创建型模式的利弊 , 自然在权衡之前 , 我们首先需要对各个创建型模式形成自己较深刻的见解 , 这样在面临抉择的时候才能根据实际需求作出最恰当的选择 . 

    通常来说 , 抽象工厂模式 , 建造者模式 , 原型模式都较工厂方法模式实现起来更加复杂一些 , 但是使用也更加灵活一些 . 但是越复杂 , 越灵活的东西实现起来自然也就越复杂 , 比如抽象工厂模式 , 在实现的过程中可能需要较多的工厂类来支撑 , 因为对于产品族中的各个具体产品都需要一个对应的工厂类来创建 . 通常 , 在软件设计之初 , 我们会从工厂方法模式开始设计 , 只有当系统中需要更大的灵活性或者说工厂方法已经不能很好地满足我们的设计理念的时候 , 此时 , 作为系统设计师的我们 , 便需要将设计向其他的创建型模式进行推进和演化 , 这当然也需要你对所有的创建型有一定的了解 , 这样才能在权衡各种设计模式时显得游刃有余

    有些时候创建型模式是可以重叠使用的 , 有一些抽象工厂模式和原型模式都可以使用的场景 , 这个时候使用任一设计模式都是合理的;
    在其他情况下 , 他们各自作为彼此的补充:抽象工厂模式可能会使用一些原型类来克隆并且返回产品对象 .  
    抽象工厂模式 , 建造者模式和原型模式都能使用单例模式来实现他们自己;抽象工厂模式经常也是通过工厂方法模式实现的 , 但是他们都能够使用原型模式来实现; 
    通常情况下 , 设计模式刚开始会使用工厂方法模式(结构清晰 , 更容易定制化 , 子类的数量爆炸) , 如果设计者发现需要更多的灵活性时 , 就会慢慢地发展为抽象工厂模式 , 原型模式或者建造者模式(结构更加复杂 , 使用灵活); 
    原型模式并不一定需要继承 , 但是它确实需要一个初始化的操作 , 工厂方法模式一定需要继承 , 但是不一定需要初始化操作; 
    使用装饰者模式或者组合模式的情况通常也可以使用原型模式来获得益处; 
    单例模式中 , 只要将构造方法的访问权限设置为 private 型 , 就可以实现单例 . 但是原型模式的 clone 方法直接无视构造方法的权限来生成新的对象 , 所以 , 单例模式与原型模式是冲突的 , 在使用时要特别注意 . 

猜你喜欢

转载自blog.csdn.net/xingbaozhen1210/article/details/79805051