静态代理

静态代理的实现步骤

  1. 首先要抽象出一个被代理类接口,被代理类实现该接口。
  2. 代理和被代理类实现相同的接口

**注:**被代理类又叫委托类、目标类

优点
解耦
缺点

  1. 因为代理类和代理类实现了相同的接口,存在重复代码
  2. 如果接口增加一个方法,除了所有被代理类需要实现这个方法之外,还需要所有的代理类也实现这个方法,增加了代码的复杂度.

举例

/**
 *小明和小红都要将自己的房子出售或者出租 抽象出一个接口
 */
public interface House {
    public void sell();
    public void rentalHouse();
}
package com.my.controller.proxy;

/**
 * 小红的房子
 */
public class XiaoHongHose implements House {
    @Override
    public void sell() {
        System.out.println("小红卖房子");
    }

    @Override
    public void rentalHouse() {
        System.out.println("小红出租房子");

    }
}

package com.my.controller.proxy;

/**
 * 小明的房子
 */
public class XiaoMingHose implements House {
    @Override
    public void sell() {
        System.out.println("小明卖房子");
    }

    @Override
    public void rentalHouse() {
        System.out.println("小明出租房子");

    }
}

package com.my.controller.proxy;

/**
 * 代理类
 */
public class Agent implements House {
    private House house;
    public Agent(House house){
        this.house=house;
    }
    @Override
    public void sell() {
        System.out.println("卖房子前给干点事");
        house.sell();
        System.out.println("卖房子后给干点事");
    }

    @Override
    public void rentalHouse() {
        System.out.println("租房子前给干点事");
        house.rentalHouse();
        System.out.println("租房子后给干点事");
    }
}

package com.my.controller.proxy;

public class ProxyMain {
    public static void main(String[] args) {
        House xiaoHongHose = new XiaoHongHose();
        Agent xiaoagent = new Agent(xiaoHongHose);
        xiaoagent.sell();

        House xiaoMingHose = new XiaoMingHose();
        Agent xiaoMingAgent = new Agent(xiaoMingHose);
        xiaoMingAgent.rentalHouse();
    }
}

运行结果:
卖房子前给干点事
小红卖房子
卖房子后给干点事
租房子前给干点事
小明出租房子
租房子后给干点事

具体哪个框架里面用到的静态代理还没看到,一般都是动态代理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值