序号 | 设计模式 | 定义 | 本质 | 类型 | 框架源码举例 |
---|---|---|---|---|---|
1 | 简单工厂模式(Factory) | 提供一个创建对象实例的功能。被创建的对象可以是接口、抽象类,也可以是具体的对象 | 创建对象 | 创建型 | LoggerFactory、Calender |
2 | 工厂方法模式(Factory Method) | 定义一个用于创建对象的接口,让子类决定实例化哪一个类 | 将创建对象的任务延迟到子类来实现 | 创建型 | |
3 | 抽象工厂模式(Abstract Factory) | 提供一个创建一系列相关或者相互依赖对象的接口,具体的创建由他们的子类去完成 | 选择产品族的实现 | 创建型 | |
4 | 单例模式(Singleton) | 保证一个类仅有一个实例,并提供一个获得它的全局访问点 | 控制实例对象只有一个 | 创建型 | BeanFactory、Runtime |
5 | 原型模式(Prototype) | 通过拷贝创建新的对象 | 克隆生成对象 | 创建型 | ArrayList、PrototypeBean |
6 | 建造者模式(Builder) | 讲一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的实例对象 | 分离整体构建算法和部件构造,并开放个性配置步骤 | 创建型 | StringBuilder、BeanDefinitionBuilder |
7 | 代理模式(Proxy) | 为其他对象提供一种代理以控制对这个对象的访问 | 增强职责或控制对象的访问 | 结构型 | ProxyFactoryBean、JdkDynamicAopProxy、CglibAopProxy |
8 | 外观模式(Facade) | 为子系统中的一组接口提供一个一致的界面,外界系统通过统一的界面访问内部系统 | 封装交互、简化调用 | 结构型 | JdbcUtils、RequestFacade |
9 | 装饰器模式(Decorator) | 动态的给同一类的对象增加一些额外的职责,使得用户可以灵活的选择要实现的功能 | 动态组合 | 结构型 | BufferedReader、InputStream、OutputStream |
10 | 享元模式(Flyweight) | 利用缓存实现大量细粒度对象的共享 | 分离与共享 | 结构型 | String、Integer、ObjectPool |
11 | 组合模式(Composite) | 将对象组合成树形结构以表示“整体 - 部分”的层次结构。组合模式使得用户对叶子对象和组合对象的使用具有一致性 | 统一叶子对象和组合对象 | 结构型 | HashMap、SqlNode |
12 | 适配器模式(Adapter) | 将一个类的接口转换成客户希望的另一个接口,使原本因为接口不兼容不能工作的类变得可以兼容 | 转换匹配、复用功能 | 结构型 | AdvisorAdapter、HandlerAdapter |
13 | 桥接模式(Bridge) | 将抽象部分与它的实现部分分离,使他们可以独立地变化 | 分离抽象和实现 | 结构型 | DriverManager |
14 | 模板方法模式(Template Method) | 定义一个操作中的算法骨架,并将一些步骤延迟到子类中去实现。模板方法模式使的子类可以不改变算法的结构即可改变该算法的特定步骤 | 固定算法骨架 | 行为型 | JdbcTemplate、HttpServlet |
15 | 策略模式(Strategy) | 定义一系列可以相互替换的算法,使的算法可以独立于使用它的客户而变化 | 分离算法、选择实现 | 行为型 | Comparator、InstantiationStrategy |
16 | 责任链模式(Chain of Responsibility) | 使多个对象都有机会来处理请求,从而避免了将所有逻辑都耦合到一个对象中的情况。将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理请求或者根据规则拦截掉该请求 | 分离职责、链式调用 | 行为型 | FilterChain、Pipeline |
17 | 迭代器模式(Iterator) | 提供一组方法顺序访问一个聚合对象中的各个元素,而又不会暴露该对象的内部实现 | 控制访问聚合对象中的元素 | 行为型 | Iterator |
18 | 命令模式(Command) | 将请求封装成命令对象从请求者传递到接收者,从而解耦请求对象和真正的功能实现对象 | 封装请求,解耦调用和处理对象 | 行为型 | Runnable、TestCase |
19 | 状态模式(State) | 容许一个对象在其内部状态变化时改变它的行为 | 根据状态来分离和选择行为 | 行为型 | Lifecycle |
20 | 备忘录模式(Memento) | 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到保存的状态 | 保存和恢复内部状态 | 行为型 | StateManageableMessageContext |
21 | 中介者模式(Mediator) | 用一个中介对象来封装一系列对象交互,中介者使的各对象不需要显示的互相引用,从而使其耦合松散,可以单独变化 | 封装网状调用成星状调用 | 行为型 | Timer |
22 | 解释器模式(Interpreter) | 给抽象的语法定义一个解释器,使这个解释器可以解释语言中的定义 | 分离实现,解释执行 | 行为型 | Pattern、ExpressionParser |
23 | 观察者模式(Observer) | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新 | 触发通知,联动更新 | 行为型 | ContextLoaderListener |
24 | 访问者模式(Visitor) | 定义一个作用于某对象结构中不同元素的操作,使的不改变元素类型的前提下能够根据不同的元素实现不同的功能 | 预留通道、回调实现 | 行为型 | FileVisitor、BeanDefinitionVisitor |
后记
个人总结,欢迎转载、评论、批评指正