软件设计模式
1.设计模式分类图
2.常见的设计模式
2.1代理模式
1.代理模式?
- 结构型的设计模式。也算是行为型的。
- 核心:调用方和被调用方之间增加一个中介者。也就是代理。
- 调用方->代理->被调用方
- 案例:买房子找中介,求职找猎头
2.为什么出现中介???
- 交给专业的人办理。减少麻烦和成本。
如果?add学生和删除学生并打印日志。
- 添加日志
- 过些天加上事务
- 。。。。
复杂,可维护性差。面向对象的核心对扩展开放,对修改封闭。事务,日志不属于学生管理业务,我们需要交给专门的类去处理。代理的出现可以解决这个问题。
3.简介:使用代理类。给对象的行为增加辅助功能的解决方案就是代理模式。上面这种方式是动态代理。许多类都需要这个都需要单独设置一个代理类,算是静态代理。
4.动态代理:就是灵活的了。利用“反射”。InvocationHandler接口的Proxy类。
JDK本身有动态代理,或者是
cglib_百度百科Java的动态代理的扩展。
4.代理模式和装饰器的区别?
- 代理模式和装饰器都是把原有的对象放到代理模式和装饰器中去调用有什么区别呢???
装饰器来说:是自己人,增加的功能是是对自己的增强
代理:是外人,增加的功能和本身没有之间的关系
2.2职责链模式
1.简介:行为型的。核心在于链。
2.一个任务从A->B->C,最终由C进行处理,形成了一个完整的任务处理链条。
核心思想如下:
- 面对一个任务每个任务处理者需要研判自己能否处理该任务。
- 如果能处理则处理并返回
- 如果不能处理交给下一个任务处理者
- 直到任务被处理完成。
A,B,C称为Handler,产品经理是CLient角色。
像是数据中的链表。
3.选择职责链的模式好处是什么???
- 更加灵活
- 我们可以让多个任务处理者都对任务进行部分处理,直到链条最后才能把任务处理完毕
- 例如:若干个过滤器形成了一个职责链,每个过滤器负责过滤掉输入信息当中的部分非法内容。此时策略模式是无法进行实现的。
4.如何使用UML进行表示???
5.用代码如何进行实现呢???
职责链中的每一个具体的handler都继承自统一的抽象类。
每一个Handler对象都有一个successor成员,指向它的下一个任务处理者。就像链表系欸但的next指针一样。
客户端如何进行调用
只需要设置好整个链路和处理者的次序。然后直接调用第一个处理者的handleRequets方法。就相当于启动了整个链路。
当需要修改的时候只需要修改底层的逻辑。重新的配置链路就可以,添加和删除Handler或者改变Handler的次序。
6.职责链的缺点???
- debug的时候不是很友好。深入很多层。
7.什么框架使用了职责链模式???
- tomcat,的过滤器,Filter设置访问权限,参数合法性等
- Spring MVC中也设置了职责链,当客户端的http请求到了web应用之后,会被mvc的框架的DispatcherServlet类进行分发,,分发给对应的controller层的具体方法,进入controller层的业务逻辑之前,会经过一系列的interceptor