1、创建型模式
1)单例模式
Singleton Pattern
-
创建某个类的实例,该类的实例在系统中只有这一份
-
实现方式
-
八种方式:推荐用 枚举、内部静态类、DCL双重检测锁
-
案例
-
java.lang.Runtime 就是经典的 单例模式(饿汉式)
2)简单工厂模式
Simple Factory Pattern
- 由工厂创建出产品类;客户端不用创建产品,直接从工厂获取;实现客户端和产品创建的解耦;如果客户端有多个,产品的创建过程一旦发生变化,只需在工厂里改变即可,客户端不用变,非常方便
3)抽象工厂模式
Abstract Factory Pattern
- 将工厂抽象成两层,AbsFactory(抽象工厂) 和具体实现的工厂子类。可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展
4)原型模式
Prototype Pattern
-
用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象;该类的对象在系统中存在多份
-
实现方式
-
浅拷贝 (默认)
-
基本数据类型:值传递
-
引用数据类型:引用传递
-
在一个对象中修改引用成员变量会影响到另一个对象的该成员变量值
-
深拷贝
-
对整个对象(包括对象的引用类型)进行拷贝
-
方式一:重写 clone() 方法
-
方式二:对象序列化 和 反序列化
5)建造者模式
Builder Pattern
-
一步一步创建一个复杂的对象,允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节
-
四个角色
-
产品角色(Product):具体的产品对象
-
抽象建造者(Builder):创建 Product 对象的各个部件指定的接口/抽象类
-
具体建造者(ConcreteBuilder):实现接口,构建和装配各个部件
-
指挥者/经理(Director):构建使用 Builder 接口的对象。主要是用于创建复杂的对象
-
案例
-
需要建房子:过程为打桩、砌墙、封顶
-
房子有各种各样的,比如普通房,高楼,别墅,各种房子的建造过程虽然一样,但是细节不同
2、结构型模式
1)适配器模式
Adapter Pattern
-
将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配,不能一起工作的两个类可以协同工作
-
客户端可以通过适配器,有选择地使用目标接口的方法(不是全部方法)(接口适配器)
-
分类
-
类适配器
适配器继承了目标对象类
- 对象适配器