设计模式基础
设计模式主要基于的面向对象设计的原则:
程序到一个接口不用实现;
有利于对继承对象组合;
设计模式用途:
开发人员的通用平台;
最佳实践;
类型:
创造模式:提供了一种创建对象而隐藏创建逻辑的方法,而非直接使用new来实例化对象;
结构模式:涉及类和对象组成,继承概念用于组成接口并定义方法组合对象以获得新功能;
行为模式:侧重于对象之间的通信;
J2EE 模式:设计表示层,由Sun Java Center标识;
创造设计模式
工厂模式
无创建逻辑暴露给客户端创建对象,使用一个通用接口引用新创建的对象;
实现步骤:
创建一个接口;
创建实现相同接口的具体类;
创建工厂根据给定信息生成具体类的对象;
使用工厂通过传递类型等信息来获取具体类的对象;
验证结果;
抽象工厂模式
接口负责创建相关对象的工厂,而不明确指定他们的类,每个生成的工厂可按照工厂模式提供对象;
单例模式
设计一个类,负责创建一个对象,同时确保只创建一个对象,类提供一种方法来访问它的唯一对象,可直接访问而不需要实例化类对象;
原型模式
涉及实现一个原型接口,只创建当前对象的克隆;
Builder模式
构造器逐步构建最终对象,此构造器独立于其他对象;
结构设计模式
适配器(Adapter)模式
组合两个相互独立不兼容接口之间的桥梁,涉及一个单独的类,负责连接独立或不兼容接口的功能;
桥接(Bridge)模式
定义与实现分离,涉及一个充当桥接的接口,这样使得具体类与接口实现者类无关;
组合模式
以同样的方式处理一组对象作为单个对象,根据树结构组成对象,以表示部分以及整个层次结构;
过滤器(条件)模式
使开发人员可以使用不同条件过滤一组对象,并通过逻辑操作以解耦方式将其链接;
装饰者(Decorator)模式
允许用户向现有对象添加新功能而不改变其结构,创建一个修饰器类用于包装原始类并提供附加功能,保持类方法签名完整;
外观(Facade)模式
隐藏系统复杂性,并为客户端提供一个可以访问系统的接口,提供客户端所需的简化方法和委托调用现有系统类的方法;
享元(Flyweight)模式
主要用于减少创建的对象数量,减少内存占用并提高性能,此模式尝试通过存储已存在的类似对象以重用,并在找不到所匹配的对象时创建新对象;
业务代理模式
常用于解耦表示层和业务层,用于减少层代码中的业务层代码的通信或远程查找功能,业务层中实体如下:
客户端:表示层代码可以是 JSP,servlet 或 UI java 代码;
业务代理:为客户端实体提供对业务服务方法的访问的单入口点类;
查找服务:负责获得相关业务的实施和提供业务的委托对象业务对性爱难过的访问;
业务服务:具体类实现这个业务服务以提供实际的业务实现逻辑;
行为设计模式
责任链模式
为请求创建一系列接收者对象,将发送方与接收方分离,每个接收器中都包含着对另一个接收器的引用,若有一个对象不能处理请求,则将相同对象传递给下一个接收者;
命令模式
数据驱动设计模式,请求作为命令包装在一个对象下,并传递给调用器对象,调用者对象查找可以处理此命令的适当对象,并将命令传递到执行命令的相应对象;
解释器模式
提供了一种评估计算语法或表达式的方法,设计实现一个表达式接口,用于解释一个指定的上下文,常用于 SQL 解析,符号处理引擎等;
迭代器模式
用于以顺序方式访问集合对象的元素,且不需知道其底层表示;
调解者(Mediator)模式
用于减少多个对象或类之间的通信复杂性,提供一个中介类,用于处理不同类之间的所有通信,并支持通过松散耦合来维护代码;
备忘录模式
用于恢复一个对象以前的状态;
观察者模式
在对象之间存在一对多关系时使用;
状态模式
类根据其状态改变而变,在这个模式中,我们创建表示各种状态的对象,以及随对象状态变化而行为变化的上下文对象;
策略模式
此模式中,可在运行时更改类行为或其算法,创建表示各种策略对象和其行为根据其策略对象而变化的上下文对象;
模版模式
抽象类中公开了定义的方法/模版来执行它的方法,其子类可以根据需要重写方法实现,但调用方式与抽象类定义的方式相同;
访问者模式
使用访问者类来改变元素类的执行算法,通过此方式,元素执行算法可随访问者变化而变化,根据每个模式,元素对象必须接受访问者对象,以便访问者对象处理对元素对元素对象的操作;
空对象模式
在这个模式中,空对象将替换NULL对象实例的检查,而非检查一个空值,NULL对象反映一个无关的关系,还可以用于在数据不可用时提供默认行为,空对象模式创建一个抽象类,指定要执行的各种操作,扩展此类的具体类和一个NULL对象类,不提供此类的任何实现,且无需检查空值;
MVC 模式
模型:表示携带数据对象或JAVA POJO,若其数据改变也可以具有逻辑来更新控制器;
视图:表示模型包含的数据的可视化层;
控制器:对模型和视图都起作用,控制数据流进入模型对象,并在数据更改时更新视图,保持视图与模型分开,也就是处于视图与模型的中间层;
组合实体模式
用于EJB持久化机制,表示对象图的EJB实体bean,组合实体更新时,内部依赖对象bean将自动更新为有 EJB 实体 bean 管理,Bean参与者为:
组合实体:主要的实体bean,可以是粗粒度的或可以包含用于持久性目的的粗粒度对象;
粗粒实体:包含依赖对象,有自己的生命周期;
依赖对象:是一个对象,取决于其持久度生命周期粗粒对象;
策略:表示如何实现复组合实体;
数据访问对象模式
用于将低级数据访问API或操作与高级业务服务分离,模式的参与者为:
数据访问对象接口:定义要对模型对象执行的标准操作;
数据访问对象具体类:负责从数据源获取数据,数据源可以是数据库/xml或任何其他存储机制;
模型对象或值对象:简单的POJO,包含用于存储使用DAO类检索的get/set方法;
前端控制器模式
用于提供集中式请求处理机制,以便所有请求由单个处理程序处理,可以执行请求的身份验证、授权、记录或跟踪,然后将请求传递到相应处理程序,包含的实体为:
前端控制器:用于处理应用程序(基于 Web 或桌面)的各种请求的单个处理程序;
分发器:前端控制器可以使用将请求分派到相应的特定处理器的分派器对象;
视图:进行请求的对象;
拦截过滤器模式
过滤器:请求处理程序执行前或后执行某些任务的过滤器;
过滤器链:携带多个过滤器,并帮助在目标上以定义的顺序执行;
目标:请求处理程序;
过滤器管理器:管理过滤器和过滤器链;
客户端:向目标对象发送请求的对象;
服务定位模式
服务:将处理请求的实际服务,将在JNDI服务器中查找此类服务的引用;
上下文/初始上下文:JNDI上下文携带对用于查找目的的服务的引用;
服务定位器:通过JNDI查找缓存服务获得服务的单一联系点;
缓存:用于存储服务的引用以重用他们的缓存;
客户端:通过ServiceLocator调用服务的对象;
传输对象模式
业务对象:业务服务使用数据填充传输对象;
传输对象:具有仅设置/获取属性的方法的简单POJO;
客户端:请求或发送传输对象到业务对象;