创建型模式
将对象的创建和使用进行分离,使用者不需要知道对象的创建过程,在开发过程中使用依赖注入,基本上是这个原则了。
创建型模式包含有五种设计模式: 单例模式、原型模式、工厂模式、抽象工厂、建造者模式。
- 单例模式: 最常用,最简单的模式,主要是为了保持某个类在全局中只有一个实例,经常用在配置文件中。
- 原型模式: 通过对象复制,减少差别小的对象初始化工作,不过java离有clone方法,省了好多事。
- 工厂模式: 专注于生产对象,把对象生产的细节交给工厂。
- 抽象工厂: 遵循依赖倒置原则,面向接口编程,最常用的是SessionFactory。
- 建造者模式: 把创建一个完整对象的活给拆分开,有些对象用精装,有些用简装,可以根据需求来定义。而且建造者模式里的工人也可以分为小工和高工。
单例模式
单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。
单例模式有 3 个特点:
- 单例类只有一个实例对象;
- 该单例对象必须由单例类自行创建;
- 单例类对外提供一个访问该单例的全局访问点;
单例模式有两种实现方式:饿汉式和懒汉式。
饿汉式,刚开始就创建实例,建议是以这种模式实现,以空间换时间,而且不容易出线程问题。
懒汉式,等用的时候再创建,可能存在线程安全,在使用懒汉式的时候可以使用volatile和synchronized关键字来限制多线程访问,保障线程安全。
原型模式
原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。
在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效。
原型模式包含以下主要角色。
- 抽象原型类:规定了具体原型对象必须实现的接口。
- 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。
- 访问类:使用具体原型类中的 clone() 方法来复制新的对象。
工厂模式
工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。
在有些应用中可以给工厂的出口加上synchronized,就好像真实的工厂中产量有限,生产线就那么几条,每次的出货量都是有控制的。
通过配置说明工厂有多少出货口和多少条生产线,既保障了线程安全又保障了效率。
抽象工厂
抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
最常用的是SessionFactory,基本上每个开发都用过,基于jdbc的,不同数据库或者不同的连接方式,最终都通过SessionFactory,面向接口进行编程。
抽象工厂模式的主要角色如下。
- 抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
- 具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
- 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
- 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它 同具体工厂之间是多对一的关系。
建造者模式
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。
可以在分解后,将建造者中的每一步都返回当前对象,这样可以组成链式调用,在建造的时候写着方便。
该模式的主要优点如下:
- 各个具体的建造者相互独立,有利于系统的扩展。
- 客户端不必知道产品内部组成的细节,便于控制细节风险。
建造者(Builder)模式的主要角色如下。
- 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
- 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
- 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
- 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
就不写代码来说明了,创建型模式都很简单
共享一下资源:
* 《大话设计模式》: https://t00y.com/file/22083442-403125607
* 《深入浅出设计模式》: https://t00y.com/file/22083442-403125625