- 行为型模式
- 命令模式Order、Command
- 作用: 将一个请求(命令)封装为一个对象,如关灯的命令封装为LightOffCommand(Light属性)对象,从而实现客户端对于命令的参数化处理。如在客户端遥控器按下1时,自动关灯命令。
- 使用场景: GUI开发中的每个按钮,触发-反馈机制
- UML案例:
-
- 策略模式Strategy
- 作用: 将实现某个目的的多个算法封装起来,由客户端选择具体调用哪个策略
- 注意事项: 在策略过多时(>4),复杂度过高。此时建议使用混合策略进行处理
- UML案例: i,j实现运算,可以有加法策略,乘法策略等
-
- 状态模式State
- 作用: 在对象的内部状态发生了变化时,自动去选择对应的策略
- 使用场景: 将某个状态以及对应的行为放在一个类中,方便增加新的状态。
- UML案例: 对于上班Context,可以根据上午下午晚上的时间,自动选择开会、工作、睡觉的策略。
Uml图和策略模式相同,但意图却完全不一样,策略模式是让用户指定更换的策略算法,而状态模式是状态在满足一定条件下的自动更换,用户无法指定状态,最多只能设置初始状态。
-
- 迭代器模式Iterator
- 作用: 提供一个方法去顺序访问一个聚合对象的内部结构,已达到隐藏其内部结构的目的
- 特点: 迭代器模式,将存储数据以及便利数据进行职责分离;在增加新的聚合类时,类文件成倍增加,会增加系统的复杂程度
- JDK中使用: java中的iterator接口
- UML案例:
-
- 观察者模式Observer
- 作用: 如在天气预报的一对多的设计关系中,如果天气发生了变化,则需要观察者通知到多个被观察者,并让其自动采取策略(加衣减衣等)。
- 缺点: 当观察者过多时,被观察者发生变化,通知到所有的观察者将花费很多时间。建议异步处理
- UML案例: 拍卖中,拍卖师观察最高价,然后通知其他出价者。
逻辑:被观察者Subject,观察者顶级接口IObserver。被观察者Subject中持有一个List<IObserver>的集合list,在观察者Observer被实例化时加入到被观察者的list中。当被观察者Subject被改变时,调用其内部内部方法notifyAllObservers,执行各个观察者的update操作。
-
- 责任链模式Responsibility :servlet的过滤器
- 作用: 将请求的接收者(每一个接收者都包含了另一个接收者的引用)串成一个链,让请求在改责任链上传播,直到有接收者进行了处理。
- 注意事项: 防止责任链过长
- JDK中使用: struts的拦截器,servlet的过滤器
- UML案例: 一个审批文件,在村,乡,市的处理流转
-
- 中介者模式Meditor
- 作用: 如果多个对象相互耦合成一个网状结构时,使用中介者模式,使其成为一个星形结构。手机斗地主的各个用户。
- 使用场景: 场调度系统,wto的各成员国通过中介者wto完成,mvc中的c是m和v的中介者
- 注意事项: 中介者出现问题,系统会受到重大影响。新增一个同事类时,需修改中介者类,此时使用观察者和状态模式来解决
- UML案例: 模拟租房者和房东,通过中介者转发信息案例
-
- 备忘录模式Memento
- 作用: 在不破坏对象封装的基础上,捕获一个对象的内部状态,并在该对象之外保存该状态,即备份
- 使用场景: 存档,ctrl+z,后退键,数据库事务管理,svn的版本库,提供回滚机制的系统
- 注意事项: 每保存一次对象状态则消耗一次资源
- UML案例: 1、后悔药。 2、打游戏时的存档。 3、Windows 里的 ctri + z。 4、IE 中的后退。 4、数据库的事务管理。
-
- 模板模式Model
- 作用: 如定义一个打游戏的模板,如:initialize();//初始化游戏 startPlay();//开始游戏endPlay();//结束游戏,其具体的实现则交给细节来实现。
- JDK中使用: spring 中对 Hibernate 的支持,如开启事务、获取 Session、关闭 Session 的流程
- 门面模式
- 作用: 一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,供子系统的外部与其内部的通信,该接口不参与内部逻辑运算
- J2EE模式
- MVC 模式
- MVC 模式代表 Model-View-Controller(模型-视图-控制器)模式,用于应用程序的分层开发。
- Model(模型):代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View(视图):代表模型包含的数据的可视化。
- Controller(控制器):作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
-
- 数据访问对象模式:DAO 模式
- DAO 模式用于把低级的数据访问,从高级的业务服务中分离出来。
- 数据访问对象接口(Data Access Object Interface):dao层接口。
- 数据访问对象实体类(Data Access Object concrete class):dao层的实现类或者xml文件。
- 模型对象/数值对象(Model Object/Value Object):POJO。
-
- 前端控制器模式
作用:对于外部的请求,提供一个集中的请求处理机制。如spring的DispatcherServlet,接收外部的请求,随后由调度器通过HandlerMapping映射到对应的处理器中。
- 前端控制器(Front Controller):对外提供的统一的处理机制。
- 调度器(Dispatcher):来决定请求到相应的具体处理程序。
- 视图(View):是为请求而创建的对象。
-
- 拦截过滤器模式
即,将多个过滤器(Filter),存放在过滤器链(Filter Chain)中。提供给外部接口过滤管理器(Filter Manager),当外部传入带过滤对象时,通过Filter Manager调用过滤器链的execute()方法,进行处理。
相当于过滤器模式下的and操作。
-
- 服务定位器模式
当使用 JNDI 查询定位各种服务的时,查找 JNDI 的代价很高,故利用了缓存技术。在首次请求某个服务时,服务定位器在 JNDI 中查找服务,并缓存该服务对象。当再次请求相同的服务时,服务定位器会在它的缓存中查找,这样可以在很大程度上提高应用程序的性能。
设计模式大纲 https://blog.csdn.net/qq_38331606/article/details/87965558