设计模式

https://www.jianshu.com/p/d6ff54d72afb

目录

一.代理模式

二.责任链模式

三.策略模式

四.观察者模式

五.适配器模式

六.模板方法

七.装饰者模式

八.工厂模式

九.单例模式


一.代理模式

   通过生成代理对象,控制原对象的或者增强原对象。

静态代理

jdk动态代理:代理接口 实现InvocationHandler,通过反射生成代理对象,执行invoke方法

cglib动态代理:代理接口或者类

用例:springaop,mybatismpper,mybits拦截器,

  • 如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理来完成操作(Spirng默认采用JDK动态代理实现机制);

  • 如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理


二.责任链模式

通常每个接收者都包含对另一个接收者的引用!为请求创建了一个接收者对象的链,并在该链上传递请求,直到有一个接收者对象处理它。通过让更多对象有机会处理请求,避免了请求发送者和接收者之间的耦合。

SubjectChain持有处理对象的集合private List<Subject> successors, process调用每一个Subject的execute,execute方法执行之后会再调用链上process的方法循环;

用例:mybits拦截器InterceptorChain,servlet中的filter


三.策略模式

一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

Context 持有Strategy抽象类,executeStrategy执行每一个Strategy里的方法


四.观察者模式

当一个对象被修改时,则会自动通知它的依赖对象

Subject(被观察的对象)持有观察者集合List<Observer> observers,通常还提供添加attach和删除detach

观察者的方法,被观察者状态变化setState通知所有观察者notifyAllObservers()


五.适配器模式

适配器模式是将一个类的接口转换成客户希望的另外一个接口,

类适配器模式:适配器继承目标类

对象的适配器模式:适配器持有目标类对象

接口的适配器模式:多个适配器实现接口,接口向外提供统一方法

springmvc中调用handle的方法用到了适配器模式,(宽泛的概念Controller,以及HttpRequestHandler,Servlet,等等)适配器实现适配器接口,调用的时候每个适配器判断出入的handladpter是不是当前类型,如果是,调用handle处理.


六.模板方法

为防止恶意操作,一般模板方法都加上 final 关键词.

完成某一个功能,有几个固定的步骤,但每个步骤的实现根据具体对象的不同,实现的细节也不同。模板方法模式可以让具体的实现细节由子类来完成,而在父类中定义好骨架


七.装饰者模式

  • 目标接口实现类和包装器抽象类都是目标接口的实现.
  • 包装器抽象类有各种继承,各种继承在目标接口方法前后包装
  • 包装器创建时传入目标类实现,产生的都是目标接口的实现
  • 代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造

八.工厂模式


九.单例模式

保证一个类仅有一个实例

  • 懒汉式,线程不安全,需要时再创建对象
  • 懒汉式,线程安全,需要时再创建对象,获取对象的方法加上synchronized
  • 饿汉式,线程安全,初始化时就创建对象去,对象属于静态成员变量,所以线程安全,没有 实现懒加载
  • 双检锁/双重校验锁,volatile加synchronized

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值