设计模式(一)代理模式

本文介绍了代理模式的基本概念,阐述了其在系统设计中的作用,如隔离、开闭原则遵循,以及优缺点。文章通过房产中介的例子,详细解释了静态代理的实现步骤,并解答了相关疑问。同时,提到了动态代理,包括JDK和CGLIB的实现方式,强调动态代理在不手动创建代理对象的情况下增加功能的能力。
摘要由CSDN通过智能技术生成

1 内容
在这里插入图片描述
客户端不直接调用实际对象方法.而是通过调用代理对象方法,来间接调用实际对象方法.类似现实生活中租房子的人去房产中介公司找中介人员获取房源信息,签订租房合约.
2 为什么用代理模式?
(1)隔离作用
租房客户只关心房源在哪儿不关心房主是什么.
(2)开闭原则
代理类不光是客户类和委托类的中介,还可以增加额外功能.中介公司工作人员还可以提供房屋水管家具维修服务.
3 优缺点
优点
(1)将代理对与真是对象被调用的目标对象分离
(2)降低系统耦合性,扩展性好
(3)保护目标对象
(4)增强目标对象
缺点
(1)造成系统设计中类的数目增加
(2)在客户端和目标对象增加一个代理对象,请求处理速度变慢
(3)增加了系统复杂度(空间-时间)
4 分类
(1)静态代理
使用房产中介例子,代码实现如下.
step 1 公共接口-获取房屋信息

package com.whl.proxy;

/**
 * @author whl
 * @date 2020/9/9
 * 公共接口 定义租房业务具备的功能
 */
public interface Rent {
   
    /**
     * 提供房子信息
     */
    public String avialibleRoomMessage();
}


step 2 委托类-老高-实现公共接口

package com.whl.proxy;

/**
 * @author whl
 * @date 2020/9/9
 */

/**
 * 被代理角色 老高
 */
public class OldGao implements Rent {
   
    /**
     * 老高提供自己要出租的房子信息
     */
    @Override
    public String avialibleRoomMessage() {
   
        String message = "room message :one room,1000 yuan one month,1511146xxxx.";
        return message;
    }
}

step 3 代理类-房产中介公司-实现公共接口
重要,因为看不懂这里??我的问题有…
q1 为什么要写一个接口,再写委托类实现接口,代理类实现接口?

就像jdbc接口写好,不同数据库厂商实现接口.**接口代表功能集合,规定要实现的功能内容.**
Rent接口中的avialibleRoomMessage规定要获取有用的房源信息String.
委托类要实现Rent接口中的功能,提供自己的房屋信息给调用者String.
代理类要实现Rent接口中的功能,调用委托对象avialibleRoomMessage,再给调用者.他只是这样简单的存在.

q2 为什么代理类写个构造方法传参?

这个构造方法中的参数代表委托类.房产中介公司需要知道房主.才能获取房主的空闲房屋信息.
写法,可以直接在内部Rent rent = new OldGao();构造方法的话,我的理解就是更加灵活,没写死.

q3 是否必须实现公共接口?

是的.所以他就是实现了一个接口.不能动态增加其他功能,比如打扫房屋.
package com.whl.proxy;

/**
 * @author whl
 * @date 2020/9/9
 */

/**
 * 代理角色 房产中介公司
 */
public class StaticProxyRentCompany implements Rent{
   
    /**
     * 被代理角色
     */
    private Rent rent;

    public StaticProxyRentCompany(Rent rent) {
   
        this.rent = rent;
    }

    @Override
    public String avialibleRoomMessage() {
   
        System.out.println("Company find avialable room message for customer...");
        String message = this.rent.avialibleRoomMessage();
        return message;
    }
}

step 4 测试类
找中介,获取房屋信息
Rent rent = new StaticProxyRentCompany(ne

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值