设计模式-代理模式(六)

简介

在完成原有功能的情况下额外做一些事,就像中介租房子一样
代理模式分为静态代理和动态代理
静态代理需要为每一个需要被代理的类写一个代理类
动态代理,只需要写一个类就可以进行代理
主要模块

  • 抽象主题
  • 真实主题
  • 代理对象

例子-静态代理

抽象主题

//租房子接口
public interface RentHouse {
    //租房
    void rent();
}

真实主题

public class User implements RentHouse {
    @Override
    public void rent() {
        System.out.println("租到房子");
    }
}

代理对象

//中介
public class ProxyUser implements  RentHouse{

    //真实对象
    private RentHouse rentHouse;

    public ProxyUser() {
        //初始化真实对象,用户感知不到
        this.rentHouse = rentHouse = new User();
    }


    @Override
    public void rent() {
        //代理需要做的事
        System.out.println("我是一个中介。。。。。。。。。。");
        //本来需要做的事
        rentHouse.rent();
    }
}

测试

//静态代理
public class Main {
    public static void main(String[] args) {

        //不适用代理的情况
        User user = new User();
        user.rent();//租到房子

        //使用代理的情况,用户不知道被谁代理了
        ProxyUser proxyUser = new ProxyUser();
        proxyUser.rent();//我是一个中介。。。。。。。。。。
                         //租到房子
    }
}

例子-动态代理

代理对象

//动态代理
public class DynamicProxy implements InvocationHandler {

    //真实对象
    private Object subject;

    public DynamicProxy(Object subject)
    {
        this.subject = subject;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("我是中介,租房之前。。。");
        //真实对象操作
        method.invoke(subject, args);
        System.out.println("我是中介,租房之后。。。");
        return null;
    }
}

测试

//使用动态代理
public class DynamicMain {
    public static void main(String[] args) {
        //不适用代理
        User user = new User();

        //创建代理对象
        InvocationHandler handler  = new DynamicProxy(user);

        RentHouse subject = (RentHouse) Proxy.newProxyInstance(
                //创建代理对象的类加载去
                handler.getClass().getClassLoader(),
                //接口
                user.getClass().getInterfaces(),
                //代理对象
                handler);
        //执行
        subject.rent();

//        我是中介,租房之前。。。
//        租到房子
//        我是中介,租房之后。。。
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值