工厂模式和代理模式

工厂模式和代理模式

工厂模式

定义一个创建产品对象的工厂接口,将具体产品对象的实际操作交给子工厂类完成,这就实现了"创建于使用分离"

的特性.

分为三个实现方式:简单工厂模式,抽象工厂模式,工厂方法模式

简单工厂(静态工厂方法模式):

把具体创建的对象叫做"产品",创建产品对象成为"工厂".

工厂模式如果要增加一个产品就要增加一个产品类和对应的工厂类,违背了"开闭原则".

简单工厂主要角色:

  • 简单工厂: 是核心; 负责创建所有实例的逻辑
  • 抽象产品:创建所有的对象的父类,是所有实例的公共接口
  • 具体产品:是简单工厂模式的创建目标

代理模式

有时候一个对象不想/不能直接访问另一个对象,这时就需要一个像中介一样的代理去完成某种任务.

中介就是代理对象.

优点:

可以使得客户端与目标对象分离,降低耦合度

在客户端和目标对象起到中介的作用和保护目标对象

可以扩展目标对象

模式的架构

1.抽象主题类:通过接口或者抽象类声明真实主题和代理对象实现的具体业务

2.真实主题类:是代理对象所代表的真实对象

3.代理类:提供与真实主题相同的接口,内部有对真实主题的引用,可以扩展,访问,控制真实主题

代理分为静态代理和动态代理

静态代理:

代理类实现一个接口,任何实现该接口的对象,都可以通过代理类进行代理,增加了通用性.

同时,每个代理类都必须实现一遍委托类,如果接口中增加一个方法,代理类也都要跟着改变.

如果委托对象多,这就导致代理类非常庞大臃肿.

动态代理:

因为是在运行时期生成,所以可以对委托类进行统一管理.

分为jdk代理和Cglib代理

jdk代理:

通过反射实现,借助java自带的java.lang.reflect.Proxy,通过固定的规则生成.

步骤:

  1. 编写一个委托类的接口
  2. 实现一个真正的委托类
  3. 创建一个动态代理类,实现invocationHeardler接口,重新invoke方法
  4. 测试类中,生成动态代理的对象
Cglib代理:

采用字节码技术;

原理是通过字节码为一个类创建子类,并在子类中国拦截父类的所有方法的调用.插入横向逻辑.

由于是继承,所有不能对finnal修饰的类处理.

实现方法:

  • 引入cglibjar包
  • 动态构建子类
  • 代理的类不能被final修饰,否则会报错
  • 目标对象如果是final或static修饰,则不会只想目标对象的额外业务代码.

小结:

  1. 俩个动态代理都是实现springAOP的基础
  2. Cglib的性能比jdk的好,但是效率比jdk低
  3. 所以对象单例的对象,Cglib比较适合,反之jdk更加适合
  4. 由于Cglib是动态创建子类的方式(继承),所以对于final修饰的类无法代理

注解:

什么是注解:

java注解又称为java标注,java语言中的类,方法,变量,参数,包等都可以被标注

可以通过反射获取标注,编译器生成类文件时,标注可以被嵌入到字节码文件中.

java虚拟机可以保留标注内容,在运行时可以获取到标注内容

支持自定义标注

内置的注解:

@Override–检查是否是重写方法

@Deprecated-- 标记过期方法

@SuppressWarnings-- 压制忽略警告信息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值