ICode9

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

Java设计模式

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

标签:拦截器 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

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

ICode9版权所有