静态代理,,动态代理(使用接口操作)

静态代理

1.创建一个Moive接口,编写void play()方法

public interface Moive {
    void play();
}

2.创建一个实现类 (play类)

play类实现Moive接口 并输出一句话

public class play implements Moive {
     //实现类 实现接口   viod 无返回值
     @Override
     public void play() {
          System.out.println("我要看长城三万里");
     }
}

3.编写代理类 (Proxyplay类)

Proxyplay类实现Moive接口 并输入自己需要添加的信息

首先声明传输属性的类型和类型名

(Proxyplay类型实现Moive接口,他的类型指定是那个接口,所以说接口和类型必须是相同)

private Moive moive;

使用构造器构造setter()方法,,无参构造,有参构造

  //无参
    public Proxyplay() {
     }
     //有参
     public Proxyplay(Moive moive) {
          this.moive = moive;
     }
      //setter方法
     public void setMoove(Moive moive) {
          this.moive = moive;
     }

同时调用被代理类中实现的play()方法

@Override
     public void play() {
          System.out.println("电影即将开始,我们提前进去吧");
         moive.play();//调用被代理类中实现的play()方法
          System.out.println("电影结束啦,,我们离开吧");
     }

4. 客服端调用

实现类(Play)类实例化

 play a = new play();//new一下实现类

代理类(Proxyplay类)实例化

调用接口中的play()方法输出

Proxyplay p = new Proxyplay(a);//new代理类
  p.play();//播放电影

5.结果图 

 

动态代理 

 1.创建租房Person接口,编写void rentHouse()方法

public interface Person {
    //租房接口
    void rentHouse();

2.实现类  (Renter类) 实现Person接口 

输出信息 

public class Renter implements Person {
     //实现类
     @Override
     public void rentHouse() {
          System.out.println("我要租海景房");
     }

3.代理类(Proxyrenter类 )

构造一个类口的代理接口并返回实现类对象

 public static Person creatProxyPerson(Renter renter) {


}

生成代理类

(并把代理实现类的java文件加载出来,,和写出继承什么接口,,代理类是实现什么方法)

return (Person) Proxy.newProxyInstance(Proxyrenter.class.getClassLoader(), new Class<?>[]{Person.class}, (p, m, a) -> {


 });

代理过程插入其他

输出开始时间 和插入内容

 System.out.println("方法:" + m.getName() + "开始时间" + new Date());
 System.out.println("租客和中介交流中");

执行方法

Object invoke = m.invoke(renter, a);

租房成功,结束时间并返回方法名

System.out.println("租房成功,请入住");
System.out.println("方法:" + m.getName() + "成功入职时间" + new Date());
return invoke;

代理类整体代码

/*
 * Copyright (c) 2020, 2023.
 *
 */
package cn;

import java.lang.reflect.Proxy;
import java.util.Date;

/**
 * <p>Project: Ch12 - Proxrenter</p>
 * <p>Powered by Cyy On 2023-07-29 09:22:02</p>
 * <p>描述:<p>
 *
 * @author Cyy [210585265@qq.com]
 * @version 1.0
 * @since 17
 */
public class Proxyrenter {
    //代理类
    public static Person creatProxyPerson(Renter renter) {
         return (Person) Proxy.newProxyInstance(Proxyrenter.class.getClassLoader(), new Class<?>[]{Person.class}, (p, m, a) -> {
           //代理过程插入其他
            //1.输出开始时间
            System.out.println("方法:" + m.getName() + "开始时间" + new Date());
            System.out.println("租客和中介交流中");
           //执行方法
            Object invoke = m.invoke(renter, a);
            //3. 租房成功,结束时间
            System.out.println("租房成功,请入住");
            System.out.println("方法:" + m.getName() + "成功入职时间" + new Date());
            return invoke;
        });
    }
}

4.客服端调用 

public class Drentrer {
    public static void main(String[] args) {
         Person p = creatProxyPerson(new Renter());//应该是实例化代理接口
         p.rentHouse();

    }

}

5.结果图 

 

 

 

 

 

 

  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值