一个租房案列透彻理解--静态代理模式

本文通过一个租房案例详细介绍了静态代理模式。首先,代理模式包括抽象角色、代理角色和真实角色三个组成部分,代理角色作为真实角色的中介,实现业务逻辑并可能增加额外功能。其次,代理模式具有职责清晰、保护目标对象、高扩展性等优点。最后,文中还提及了代理模式的UML图和相关代码实现。
摘要由CSDN通过智能技术生成

静态代理模式

1、代理模式简介?
组成: 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

2、代理模式的优点?
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。

(3).高扩展性

3.uml图
这里写图片描述

代码:

package com.bjsxt.pattern;

/**
 * 代理模式
 * 抽象对象,能完成客户需求的接口
 * 以租房作为例子
 * 第一步、发布租房信息
 * 第二步、和客户商谈
 * 第三步、交押金和房租
 * 第四步、提供房钥匙
 * 第五步、客户退房时,退还押金
 * 
 * */
public interface AbstractObj {
    //发布信息
    public void publishInfo();
    //预定
    public void negotiate();
    //交押金和房租
    public void payMoney();
    //提供房子钥匙
    public void provideKey();
    //退还押金
    public void returnDeposit();
}
package com.bjsxt.pattern;

public class RealObj implements AbstractObj{

    public void publishInfo() {
        System.out.println("发布房子信息");

    }

    public void negotiate() {
        System.out.println("用户看到房子信息,和用户商谈!");
    }

    public void payMoney() {
        System.out.println("商谈成功,用户交定金和房租");
    }

    public void provideKey() {
        System.out.println("糖厂社区房东,把钥匙交给客户,让客户入住!");
    }

    public void returnDeposit() {
        System.out.println("用户退房时,退还押金!");
    }

}
package com.bjsxt.pattern;
/**
 * 代理对象 
 * 代理一个真实的对象
 * */
public class ProxyObj implements AbstractObj{
    private RealObj realObj;
    //构造一个真实对象
    public ProxyObj(RealObj realObj) {
        super();
        this.realObj = realObj;
    }


    public void publishInfo() {
        System.out.println("发布房子信息");

    }

    public void negotiate() {
        System.out.println("用户看到房子信息,和用户商谈!");
    }

    public void payMoney() {
        System.out.println("商谈成功,用户交定金和房租");
    }
    //向真实对象发出请求,调用真实对象的业务方法
    public void provideKey() {
        realObj.provideKey();
    }

    public void returnDeposit() {
        System.out.println("用户退房时,退还押金!");
    }

}
public class Client {
    public static void main(String[] args) {
        //构造一个房东,提供房子
        RealObj realObj = new RealObj();
        //创建一个代理对象,去代理租房
        AbstractObj proxy = new ProxyObj(realObj);
        //发布房源
        proxy.publishInfo();
        //和客户谈判
        proxy.negotiate();
        //交定金和押金
        proxy.payMoney();
        //提供钥匙,入住
        proxy.provideKey();
        //退尾款
        proxy.returnDeposit();
    }   
}
打印结果:
发布房子信息
用户看到房子信息,和用户商谈!
商谈成功,用户交定金和房租
糖厂社区房东,把钥匙交给客户,让客户入住!
用户退房时,退还押金!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anguser

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值