23种设计模式-静态代理

代理模式:代理、扩展目标对象的功能。
静态代理使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同的父类。

在这里插入图片描述

public interface ITeacherDao {
    
    
    void teach();
}

public class TeacherDao implements ITeacherDao {
    
    
    @Override
    public void teach() {
    
    
        System.out.println("老师授课中。。。。。");
    }
}

public class TeacherDaoProxy implements ITeacherDao{
    
    

    private ITeacherDao target;

    public TeacherDaoProxy(ITeacherDao target) {
    
    
        this.target=target;
    }

    @Override
    public void teach() {
    
    
        System.out.println("开始代理。。。。");
        target.teach();
        System.out.println("提交。。。。");
    }
}

public class Client {
    
    
    public static void main(String[] args) {
    
    
        //创建目标对象
        ITeacherDaoteacherDao=new TeacherDao();
        //创建代理对象
        ITeacherDao teacherDaoProxy=new TeacherDaoProxy(teacherDao);
        //调用代理对象的方法
        teacherDao.teach();
    }
}

代理模式和适配器模式的区别:
适配器模式是因为新旧接口不一致导致出现了客户端无法得到满足的问题,但是旧的接口不能被完全重构,而我们想使用实现了这个接口的服务,就应该把新接口转换成旧接口;(主要适配需要的接口,适配器和目标对象不是实现共同接口,而适配器继承了原先的目标对象,然后实现需要的接口,就可以接口配对了,看先前适配器模式的文章)
代理模式提供的接口和原来的接口是一样的,代理模式的作用是不把实现直接暴露给client,而是通过代理这个层,并且代理能够做一些处理。(目标对象和代理都实现了相同的接口,最终就是代理执行原来的功能的同时增加了一些额外的功能,和适配器相同的是都是目标对象的增加了适配功能,然后让适配器和代理对象的方法去做事,代理对象和适配器都的方法引用了目标对象的方法,讨论他俩的唯一区别就是没有实现共同的接口,在使用上代理模式是用了相同的接口接了代理对象,而适配器用了另一个接口接了目标对象的适配器对象,然后目标对象不满足先前的接口才需要适配的)
总结一句话:适配器是为了接口不满足而使用,代理是接口满足,我想增加目标对象的功能而使用。

代理模式和装饰器模式的区别:
装饰器模式强调的是增强自身,在被装饰之后你能够在被增强的类上使用增强后的功能。增强后你还是你,只不过能力更强了而已;代理模式强调要让别人帮你去做一些本身与你业务没有太多关系的职责(记录日志、设置缓存)。代理模式是为了实现对象的控制,因为被代理的对象往往难以直接获得或者是其内部不想暴露出来。(代码上我感觉没区别,区别就是在其意义上)

猜你喜欢

转载自blog.csdn.net/weixin_44468025/article/details/117372892