设计模式三

来源:互联网 发布:如何设置域名重定向 编辑:程序博客网 时间:2024/06/06 17:13

尚学堂视频笔记

行为型模式:关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责

命令、解释、访问者用的较少,共11种


责任链模式:chain of responsibility

将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象卓哥判断是否有能力处理该请求,如果能处理则处理,如果不能则传递给链上的下一个对象。

比if else好在哪?修改流程时要改源代码,且语句过多,增加了程序复杂程度

需要自行设定链接关系,也可以用数组、配置文件等生成链接关系,或者集合中迭代遍历

常见场景:java中,异常机制

javascript语言中,事件的冒泡和捕获机制。java语言中,事件的处理采用的是观察者模式

servlet开发中,过滤器的链式处理

struts2,拦截器的调用


迭代器模式:iterator

——提供一种可以遍历聚合对象的方式

结构:聚合对象(存储数据),迭代器(遍历数据)

场景:jdk内置的迭代器,内部类实现


中介者模式:mediator

http://www.runoob.com/design-pattern/mediator-pattern.html

和外观模式、适配器模式的区别是?

意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。


命令模式:command

——将一个请求封装为一个对象,从而使我们可用不同的请求对客户端进行参数化;对请求排队或者记录请求日子,以及支持可撤销的操作。

如事物的底层实现用到该模式


解释器模式:interpreter 开发新语言时会用到

——不同寻常的设计模式

——用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解时期设计。

——尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用jruby,groovy,java的js引擎来代替解释器的作用,弥补java语言的不足。

常见场景:el表达式、正则表达式、sql语法、数学表达式


访问者模式:visitor(应用范围非常窄,了解即可)

模式动机:对于存储在一个集合中的对象,他们可能居右不同的类型(即使有一个公告的接口),对于该集合中的对象,可以接受一类称为访问这的对象俩访问,不同访问者其访问方式也有所不同。

定义:表示一个作用于对象结构总的各元素的操作,它使我们可以在不改变元素的类的前提下定义作用于这些元素的新操作

场景:xml文档解析器设计,编译器设计,复杂集合对象的处理


策略模式:strategy

场景:商品折扣,普通客户,会员的打折优惠等

——解决某一个问题的一个算法族,(多态?个人感觉思想很相似)

分离算法,实现分离

gui编程布局管理

spring框架中,Resource接口,资源访问策略

javax.servlet.http.HttpServlet#service()


模版方法模式:template method(重要)

定义一个操作中的算法骨架,将某些步骤延迟到子类中实现。(装饰器?)

核心:处理步骤父类中定义好,具体实现延迟到子类中定义

模版调用顺序的方法将被final修饰不能被子类修改

(多态的运用,使用匿名内部类实现步骤,可便捷的改变实现)

——实现一个算法时,整体步骤很固定,但是,某些部分易变。易变部分可以抽象出来,供子类实现。

场景:非常频繁,数据库访问的封装,junit单元测试,servlet中的doGet/doPost

Hibernate中的模版程序

spring中的JDBCTemplate,HibernateTemplate


状态模式:state(未理解)

如电梯的运行:正常,自动关门,自动开门,向上,向下,维修,消防状态

红绿灯:红灯,绿灯,黄灯

网上购物时,订单的状态:下单,付款,已发货,送货中,已收货

不同的状态使用不同的行为应对

核心:解决系统中复杂对象的状态转换以及不同状态下的行为封装问题

关键代码:通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。


观察者模式:observer

广播机制的场景,servlet监听器的实现,聊天室群发消息,网络游戏的多人联机对战

用一个list维护观察者名单,提供list的register、remove方法、notify方法,遍历list成员达到通知效果。
javase提供了Observable Observer接口


备忘录模式:memento

场景:录入大批数据时,输错了上一个数据,需要恢复后再修改

word电脑的断电,再打开时,提示恢复到以前的状态

管理系统中,公文发出去后,想撤回的功能。

核心:保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原型的状态

源发器Originator

备忘录类Memento

负责人类CareTake

多次备忘可使用容器,或者栈Stack,或者序列化,持久化

场景:棋类游戏的悔棋,文档编辑中的撤销,数据库中的回滚等


原创粉丝点击