静态代理

静态代理

  • 静态代理很好理解,实现了相同接口,对原实现类包装。
  • 通过操作传入的原实现类对象来打到增强效果。
  • 代理类包含了原实现类的操作,所以调用代理对象即可。

通俗的讲:静态代理就是写出一个被代理类的双胞胎类,有共同的接口父亲,只是代理类拿着兄弟的对象在自己内部操作兄弟的行为,同时做些自己的事。


案例:结婚 婚庆公司

​ 静态代理:

  1. 和被代理目标类实现相同接口(获取相同接口方法)
  2. 代理类是对目标类的增强辅助
  3. 代理类需要传入被操作的目标类对象
  4. 代理类实现相同接口方法的时候需要在其中加入目标类的方法调用
  5. 调用代理类的接口方法即可实现增强
// 静态代理模式演示
public class staticProxy {
    public static void main(String[] args) {

        // 开始代理 代理对象获取代理目标
        WeddingCompany weddingCompany = new WeddingCompany(new YouAction());
        weddingCompany.HappuMarry();
    }
}

结婚接口:

// 定义结婚接口动作
public interface Marry {
    void HappuMarry();
}

定义结婚人动作:

// 真实结婚角色
public class YouAction implements Marry{
    @Override
    public void HappuMarry() {
        // 定义你的结婚动作
        System.out.println("你在结婚,开心");
    }
}

定义代理公司动作:

// 婚庆代理公司
public class WeddingCompany implements Marry {

    // 定义被代理目标
    private Marry target;

    public WeddingCompany(Marry target) {
        this.target = target;
    }

    // 代理公司行为
    @Override
    public void HappuMarry() {
        before();
        this.target.HappuMarry();
        after();
    }

    // 定义代理公司增强部分
    public void before(){
        System.out.println("代理公司,收定金。");
        System.out.println("代理公司,布置现场。");
        System.out.println("代理公司,主持。");
    }
    public void after(){
        System.out.println("代理公司,完成任务");
        System.out.println("代理公司,收尾款");
    }
}
代理公司,收定金。
代理公司,布置现场。
代理公司,主持。
你在结婚,开心
代理公司,完成任务
代理公司,收尾款

简短版本静态代理案例:

// 静态代理测试
public class StaticProxy {
    public static void main(String[] args) {
        HelloProxy helloProxy = new HelloProxy();
        helloProxy.sayHello();
    }
}

// 代理
class HelloProxy implements HelloInterface{

    // 被代理对象 接口获取  一般是一对一的,直接固定创建即可
    private HelloInterface helloInterface = new Hello();
    @Override
    public void sayHello() {
        System.out.println("静态代理输出--1");
        System.out.println("静态代理输出--2");
        helloInterface.sayHello();
        System.out.println("静态代理输出--3");
        System.out.println("静态代理输出--4");
    }
}
// 被代理
class Hello implements HelloInterface{

    @Override
    public void sayHello() {
        System.out.println("被代理类输出--hello");
    }
}

// 共同接口
interface HelloInterface{
    void sayHello();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值