JAVA设计模式之静态代理模式

前言

以图文进行带入,已代码示例进行演示,浅显易懂


一、初识代理

在这里插入图片描述
房东想出租房子,委托给中介来出租,中介就是代理

二、介绍代理模式

在这里插入图片描述
从上面的UML图看到,一共有四个角色:

  1. Client:相当于用户类,调用代理出租
  2. RealSubject:房东,真正出租房子的人
  3. Proxy:中介,表面上出租房子的人
  4. Subject:抽象对象接口,这里定义了房东委托中介做的事,即出租房子

三、静态代理使用

静态代理:所谓静态代理就是在程序运行前就已经存在代理类的字节码文件,代理类和被代理类的关系在运行前就确定了

以下是代码示例

  1. 定义抽象接口
/**
 * 定义房子抽象接口,房东让中介做的事:出租房子
 */
public interface HouseSubject {
    /**
     * 出租房子
     */
    void rent();
}
  1. 定义具体的实现对象:房东出租房子
/**
 * 定义具体实现对象:房东出租房子
 */
public class RealHouseSubject implements HouseSubject {
    @Override
    public void rent() {
        System.out.println("我是房东,我要出租三室两厅的房子");
    }
}
  1. 代理类:中介
/**
 * 代理类:中介
 */
public class HouseProxy implements HouseSubject {
    @Override
    public void rent() {
        // 中介给房子打广告
        this.addAd();

        HouseSubject subject = new RealHouseSubject();
        subject.rent();

        // 房子出租出去,撤销广告
        this.removeAd();
    }

    private void addAd() {
        System.out.println("广告:宝安西乡街道出租房子");
    }

    private void removeAd() {
        System.out.println("房子已经出租出去了,把广告撤销");
    }
}
  1. 租客来租房子
public class Client {
    public static void main(String[] args) {
        HouseSubject proxy = new HouseProxy();
        proxy.rent();
    }
}
  1. 打印运行结果
广告:宝安西乡街道出租房子
我是房东,我要出租三室两厅的房子
房子已经出租出去了,把广告撤销

现在可以看出,代理模式可以在不修改被代理对象的基础上,通过扩展类,进行一些功能的增强,代理类和被代理类是实现了同一个接口,或者是继承同一个类

四、思考

如果不同的房东对房子的要求不一样,比如房东A需要出租和打扫,房东B需要出租和装空调,房东C需要出租和砌墙,房东D等待,如果使用静态代理会有什么问题吗?

下一篇 《JDK动态代理模式一》 可以找到思考题的答案

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值