静态代理模式
把真实角色看为买房的,代理角色看为卖房的
- 真正做事情的是? 真实角色
- 暴露在外界的是? 代理角色
- 代理要有真实角色的引用(联系方式)
- 代理角色可以附加自己的功能(加钱)
代码实现(内附内容讲解):
//抽象角色
public interface StudentDao {
public List<Student> findAll();
public void insertStudent(Student student);
public void deleteStudent(int id);
}
//AOP动态代理,只许扩展不能修改
//真实角色
public class StudentDaoImpl implements StudentDao {
public List<Student> findAll(){
System.out.println("find students");
return null;
}
public void insertStudent(Student student){
System.out.println("insert student");
}
public void deleteStudent(int id){
System.out.println("delete student");
}
}
//代理角色
// 做StudentDaoImp的代理就得实现StudentDao
public class StudentDaoImplProxy implements StudentDao{
//代理角色要有真实角色的(可以为接口也可以为实现类)一个引用
private StudentDao studentDao = new StudentDaoImpl();
public List<Student> findAll() {
//真实干活的还是StudentDaoImpl
return studentDao.findAll();
}
public void insertStudent(Student student) {
studentDao.insertStudent(student);
}
public void deleteStudent(int id) {
//当有了安全认证后,就可以在代理中其他已经固定的方法前加这个安全认证
checkSecurity();
studentDao.deleteStudent(id);
}
//如果需要安全认证,就可以在代理中进行安全认证方法的添加(代理角色可以有附加的功能,比如房产中介可以涨房租)
private void checkSecurity(){
System.out.println("check name and pasword");
}
}
// 静态代理的缺点:1、必须先有真实角色才有代理;2、一有需求就写代理,累计多了代理就多了,就会造成类的膨胀
//当其中一个运行很好的模块,有一个新的需求的时候,我们不能修改原有模块的东西,这时候就可以去采用代理来在不改变原有模块的基础上实现功能的添加
public class Client {
public static void main(String[] args) {
//对于外界来说,暴露在外的是代理
StudentDao studentDao = new StudentDaoImplProxy();
studentDao.deleteStudent(1);
}
}
//动态代理:可以在不同角色间转换,一会为卖车中介一会为卖方中介
OOP和AOP的关系!!!
OOP 面向对象编程 重要的一点是继承复用(有了继承才可以复用)
AOP 面向切面的编程 也是为了复用(当没有继承关系时候,但是有一些共同的方法需要实现,此时通过代理复用)
静态代理的缺点
必须先有真实角色才有代理;
一有需求就写代理,累计多了代理就多了,就会造成类的膨胀
所以就有了动态代理的出现
个性签名:一个人在年轻的时候浪费自己的才华与天赋是一件非常可惜的事情
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!