软件设计 代理模式 Proxy Pattern

作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/16984043.html


代理模式 Proxy Pattern

 

实际上代理在生活中处处都存在,比如房屋中介就是代理,Apple 的授权经销商就是代理,访问国外网站所用的代理服务器也是代理,Spring 框架的 AOP 也是通过代理模式实现的。

这些代理都有一个共同特点,就是使用的一致性和中间环节的透明性,也就是说找代理做的事情需要与找对象本身做的事情是一样的,只是中间环节隐藏了而已。

代理模式分为静态代理动态代理

 

1、定义租赁操作(接口)
/**
 * 租赁操作
 */
public interface Rent {
    /**
     * 租房
     */
    void rentHouse();
}
2、定义房东(真实角色)
/**
 * 房东
 */
public class Landlord implements Rent{
    @Override
    public void rentHouse() {
        System.out.println("房东出租房子");
    }
}
3、定义中介(代理角色)
/**
 * 中介
 */
public class Intermediary implements Rent{
    /**
     * 房东
     */
    private Landlord landlord;
    public Intermediary() {
    }
    public Intermediary(Landlord landlord) {
        this.landlord = landlord;
    }
    
    @Override
    public void rentHouse() {
        // 看房
        seeHouse();
        // 签合同
        contract();
        // 租房
        landlord.rentHouse();
        // 收取费用
        toll();
    }
    /**
     * 看房
     */
    public void seeHouse() {
        System.out.println("中介带你看房");
    }
    /**
     * 签合同
     */
    public void contract() {
        System.out.println("签租赁合同");
    }
    /**
     * 收取费用
     */
    public void toll() {
        System.out.println("收中介费");
    }
}
4、租客租房(客户)
// 房东
Landlord landlord = new Landlord();
// 中介给房东代理
Proxy proxy = new Proxy(landlord);
// 租房。不用面对房东,直接找中介租房即可
proxy.rentHouse();
在这个过程中,租客直接接触的是中介,见不到房东,但是租客依旧通过代理租到了房东的房子。



优缺点:

优点

1、可以使得真实角色更加轻松,不用再去关注一些琐碎的事情。

2、公共的业务由代理来完成,实现了业务的分工。

3、公共业务发生变化时扩展更加方便。

缺点

类变多了,多了代理类,工作量变大了,开发效率降低。

 

使用场景:

远程(Remote)代理

虚拟(Virtual)代理

Copy-on-Write代理

posted @   kuaiquxie  阅读(314)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示