ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java设计模式

2021-05-11 22:30:35  阅读:22  来源: 互联网

标签:拦截器 Java 对象 代理 模式 观察者 工厂 设计模式


Java设计模式

  • 学习反射,掌握反射基本概念;
  • 动态代理,责任链模式,以及拦截器概念;
  • 观察者模式;
  • 工厂和抽象工厂模式;
  • Builder(构建)模式;

反射

newInstance();方法

动态代理模式/责任链模式

代理的作用:在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使用真实对象;

代理的步骤:

  • 代理对象和真实对象建立代理关系;
  • 实现代理对象的代理逻辑方法;

Java中有多种动态代理技术,JDK/CGLIB/Javassist/ASM,其中JDK和CGLIB两种动态代理最常用;

Spring常用JDK和CGLIB,而Mybatis还使用了Javassist,无论哪种代理其技术,理念都是相似的;

JDK动态代理中,必须使用接口,而CGLIB不需要,所以使用CGLIB会更简单一些;


JDK动态代理

建立代理对象和真实服务对象的关系一共分为两步;

首先要实现代理逻辑类必须实现java.lang.reflect.InvocationHandler接口,它里面定义了一个invoke()方法,并提供接口数组用于下挂代理对象;

CGLIB动态代理

不需要提供接口,只要一个非抽象类就能实现动态代理;

二者相似,都是用getProxy();方法生成代理对象,制定代理的逻辑类;

代理逻辑类要实现一个接口的一个方法,这个接口定义的方法就是代理对象的逻辑方法,可以控制真实对象的方法;

拦截器

开发者只要知道拦截器接口的方法,含义和作用即可,无须知道动态代理是怎么实现的;

JDK动态代理实现一个拦截器的逻辑,先定义拦截器接口Interceptor;

可以进一步简化动态代理的使用方法,使程序变得更加简单;

责任链模式

当一个对象在一条链上被多个拦截器拦截处理时,就被称为责任链模式;

可以在传递链上加入新的拦截器,增加拦截逻辑;

缺点是会增加代理和反射,代理和反射的性能不高;

观察者(Observer)模式

又被称为发布订阅模式,是对象的行为模式;

一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新自己;

观察者模式要同时存在观察者和被观察者双方,观察者可以是多个;在Java中,需要去继承java.util.Observable类;

作为观察者还需实现java.util.Observer接口的update方法;

工厂模式&抽象工厂模式

大部分情况我们都以new关键字来创建对象;

比如现实中车子的种类很多,有大巴车,轿车,救护车,越野车,卡车等.每个种类下面还有具体的型号.一个工厂生产如此多的车会难以管理,

所以往往还需要进一步拆分为各个分工厂:大巴车,轿车等分工厂.但是客户不需要知道工厂是如何拆分的,他只会告诉客服需要什么车,客服会根据客户的需要找到对应的工厂去生产车.

对客户而言,车厂只是一个抽象概念,他只是大概知道有这样一个工厂能满足他的需求;


普通工厂(Simple Factory)模式


抽象工厂(Abstract Factory)模式

抽象工厂模式可以向客户端提供一个接口,使得客户端不必指定产品的具体情况,创建多个产品族中的产品对象;


建造者(Builder)模式

建造者模式属于对象的创建模式;将一个产品的内部表象(属性)与产品的生成过程分割开来,从而使一个建造过程生成具有不同内部表象的产品对象;

分步构建对象模式;

用一个配置类对内部表象进行统筹,然后将所有信息交由构造器来完成对象创建;


总结

动态代理和责任链模式是重点,尤其是Spring和MyBatis;

标签:拦截器,Java,对象,代理,模式,观察者,工厂,设计模式
来源: https://blog.csdn.net/Juli_Baker/article/details/116672923

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有