详解代理模式--静态代理、动态代理(jdk代理、接口代理)、Cglib代理 各自的优缺点

前言

说到代理模式, 定义是这样的: 是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。
代理模式分为: 代理模式可分为三种 静态代理、动态代理(jdk代理、接口代理)、cglib代理。之前只停留在概念上, 今天要深入的说一下代理模式, 下面分析一下三种类型的实现方式以及优缺点

静态代理

静态代理是最简单的代理方式, 分为4步走

  1. 定义抽象类, 也可以是接口, 主要是定义一些普通的业务类型
public interface ITeacherDao {
	void teach();
}
  1. 定义具体的业务类, 继承(实现)上面抽象类(接口)
public class TeacherDao implements ITeacherDao {
	@Override
	public void teach() {
		System.out.println("我是老师, 正在授课");
	}
}
  1. 定义代理类
public class TeacherDaoProxy implements ITeacherDao{
	private ITeacherDao target;
	public TeacherDaoProxy(ITeacherDao target) {
		this.target = target;
	}
	@Override
	public void teach() {
		// TODO Auto-generated method stub
		System.out.println("开始");
		target.teach();
		System.out.println("结束");
	}
}
  1. 定义客户端
	public static void main(String[] args) {
		TeacherDao teacherDao = new TeacherDao();
		TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);
		teacherDaoProxy.teach();//输出结果: 我是老师, 正在授课
	}

优点

  • 在不修改目标对象的功能前提下, 嫩通过代理对象对目标功能扩展

缺点

  • 代理对象需要和目标对象实现一样的接口, 一旦接口增加了方法, 目标对象与代理对象都要维护

动态代理

未完待续

发布了145 篇原创文章 · 获赞 218 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/ywq1016243402/article/details/104008071