设计模式——代理模式-静态代理

时间:2024-04-24 22:15:58

例子:有一个教师类,教师类有一个教书方法
需要使用一个代理类来代理教师,将教师类聚合到代理类里面
在这里插入图片描述
具体代码如下:
首先创建一个接口,不仅教师类需要实现,代理类也需要实现,但是注意的是,代理类实现的时候,是使用的教师类的教书方法。

package com.StaticProxy;

//代理模式
public interface ITeacherDao {
    void teach();
}

package com.StaticProxy;

//真正的实体对象,需要被代理的类
//该类中有真正的教书方法
public class TeacherDao implements ITeacherDao {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void teach() {
        System.out.println(this.name + "在教书");

    }
}

package com.StaticProxy;

//代理,需要代理TeacherDao,它虽然有teach方法,但是不是真的会教书,所以需要调用TeacherDao的教书方法
public class TeacherDaoProxy implements ITeacherDao{
    private ITeacherDao teacherDao;

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

    @Override
    public void teach() {
        System.out.println("通过代理对象。。。");
        System.out.println("代理使用真实的teacherDao在教书");
        teacherDao.teach();
        System.out.println("代理结束");
    }
}

使用代理类:

package com.StaticProxy;

public class Client {
    public static void main(String[] args) {
        //新建一个TeacherDAO类
        TeacherDao teacherDao = new TeacherDao();
        teacherDao.setName("lisi");

        //使用一个代理类来代理教师类
        TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);
        teacherDaoProxy.teach();
    }
}

因为是静态代理,所以就是教师代理类,要是换一个需要代理的类,就不能实现了。一次引入动态代理。