设计模式
创建型
工厂
通过传参获取不同的实例.一般来说,返回的实例需要实现共同的接口.
抽象工厂
对工厂模式进行抽象封装,工厂类基层抽象工厂进行封装.与工厂模式一样,通过传参返回不同的工厂实现,再通过传参返回不同的实例.
单例
该类负责创建自己的对象,同时确保只有单个对象被创建.该类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象.
注意点:
- 单例类只能有一个实例.
- 单例类必须自己创建自己的唯一实例.
- 单例类必须给所有其他对象提供这一实例.
建造者
使用多个简单的对象一步一步构建成一个负责的对象.提供了一种创建对象的最佳方式.
应用实例:StringBuilder
原型
创建重复的对象,根据一个bean进行克隆.
应用实例:Object.clone()
结构型模式
适配器
作为两个不兼容的接口之间的桥梁.结合了两个独立接口的功能.
应用实例:jdbc
桥接
将抽象部门与实现部分分离,让它们都可以独立变化
应用实例:消息模块,抽象类将发送消息的方法封装好,但是具体如何发送消息的实现(消息内容)由实现类实现,如果采用常规的继承方法,那么发送消息的抽象类会和消息实现类耦合.这时候就需要用到桥接模式了,可以使用桥接模式将具体的实现改为一个接口,将这个接口放到抽象类中,通过构造函数传入不同的接口实现来实现不同的发送消息的实现.
过滤器
使用不同的标准过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来
重大敏感里面在发消息的时候有很多地方都需要去掉当前操作人,这个时候就可以使用过滤器模式解决问题.
Java8里面有特定的过滤器
组合
创建对象组的树形结构
public class Corp{
private String id;
private String name;
private List<Corp> subCorpList;
}
装饰器
向一个现有的对象添加新的功能,同时又不改变其结构.作为现有的类的一个包装.
外观(Facade)
隐藏系统复杂性,并向客户端提供一个可以访问系统的接口.
降低复杂系统的内部子系统的复杂度,简化客户端与之的接口.
享元(Flyweight)
用于减少创建对象的数量,以减少内存占用和提高性能.
使用HashMap存储这些对象
应用实例:String对象,如果有则返回,如果没有则创建一个字符串保存到字符串缓存池中.以及数据库的连接池.
代理(Proxy)
为其他对象提供一种代理以控制对这个对象的访问.
应用实例:spring aop
注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
行为型模式
责任链(Chain of Responsibility)
为请求创建一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.
应用实例:
- tomcat对encoding的处理
- jsp servlet中的filter
命令(command)
数据驱动的设计模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理的合适的对象,并将该命令传给响应的对象,该对象执行命令.
应用实例:
解释器
提供了评估语言的语法或表达式的方式.该模式被用于sql解析、符号处理引擎.
**应用实例:**编译器、运算表达式计算
可以考虑放到做一些比较复杂的判断上
迭代器
用于顺序访问集合对象的元素.
**应用实例:**iterator
中介者
用于降低多个对象和类之间的通信复杂性.
**应用实例:**MVC框架中,其中C(控制器)是M(模型)和V(视图)的中介者
备忘录(Memento)
保存一个对象的某个状态,以便在适当的时候恢复对象.
**应用实例:**数据库的事务管理.
观察者(Observer)
当对象间存在一对多关系时,使用观察者模式.
比如说当一个对象被修改时,则会自动通知它的依赖对象.
应用实例:
状态(state)
类的行为是基于它的状态改变的.
**使用场景:**条件、分支语句的代替者
应用实例:
空对象(null object)
一个空对象取代NULL对象实例的检查
策略
一个类的行为或其算法可在运行时更改.
应用实例:
模版
抽象类公开定义了执行它的方法的方式/模版。它的子类可以按需要重写方法实现。
**应用实例:**Spring中对于Hibernate的支持,将开启事物,获取session,关闭session等封装起来.
访问者(visitor)
元素的执行算法可随着访问者改变而改变.
应用实例:
J2EE
MVC
model-view-controller 模型-视图-控制器
主要用于应用程序的分层开发
**应用实例:**SpringMVC
业务代表(Business Delegate)
将一个具体的业务封装到一起.
组合实体(Composite Entity)
一个实体类中包含其他的实体类
数据访问对象(Data Access Object)
把低级的数据访问API或操作从高级的业务服务中分离出来,其实就是DAO
前端控制器(Front Controller)
提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理.
拦截过滤器(Intercepting Filter)
对应用程序的请求或响应做一些预处理/后处理.过滤器可以做认证/授权/记录日志
服务定位模式(Service Locator)
JNDI
传输对象模式(Transfer Object)
DTO
从客户端向服务器一次性传递带有多个属性的数据,传输对象也被称为数值对象.
POJO类,可序列化,没有任何的行为.