设计模式

设计模式

创建型

工厂

通过传参获取不同的实例.一般来说,返回的实例需要实现共同的接口.

抽象工厂

对工厂模式进行抽象封装,工厂类基层抽象工厂进行封装.与工厂模式一样,通过传参返回不同的工厂实现,再通过传参返回不同的实例.

单例

该类负责创建自己的对象,同时确保只有单个对象被创建.该类提供了一种访问其唯一对象的方式,可以直接访问,不需要实例化该类的对象.

注意点:

  1. 单例类只能有一个实例.
  2. 单例类必须自己创建自己的唯一实例.
  3. 单例类必须给所有其他对象提供这一实例.

建造者

使用多个简单的对象一步一步构建成一个负责的对象.提供了一种创建对象的最佳方式.

应用实例: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)

为请求创建一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.

应用实例:

  1. tomcat对encoding的处理
  2. 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类,可序列化,没有任何的行为.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值