北京尚学堂听课记录:静态代理模式

只愿长相守 提交于 2019-11-29 06:25:31

【1】代理:Proxy,Agent
【2】代理是什么??
举例:
房东 租客
如果你直接租给租客的话:带她看房子,砍价还价,签合同,定期检查房屋,打扫房屋

最有效率的办法:
房东(被代理的人,真实对象) —》 中介—》租客

房东:省事, 房东:最关注的租房拿钱!

中介(代理): 在帮助房东完成租房的基础上,可以提供一切辅助服务,来简化房东的经历
体现到代码中: 房东:写代码:租房 代理写代码: 帮房东租房,在租房的基础上多加很多辅助的业务逻辑

租客:对租客有好处的,更加安全,正规签合同

【3】使用代理的好处:
(1)保护真实对象 (房东)
租客不是直接和房东打交道,和代理中介打交道

(2)真实对象只需要关注主要的业务逻辑,额外的辅助的事情都交给代理来做!

【4】代理模式中涉及到的角色:
(1)标准 (接口)
真实对象,代理 必须实现同一套标准
(2)目标(真实对象)----》房东
(3)代理 —》中介 :中介实际租房,其实本质上还是房东在出租房子,本质还是房东在收钱,代理
是在这个 》租客

【5】代码:
接口:

/**

  • 真实对象和代理 必须按照同一套标准来合作
    */
    public interface Rent {//租房
    //你拿钱我给房:
    Object rentHouse(double money);
    }
    房东:

package com.bjsxt.test05;
/*
房东
*/
public class Host implements Rent {
//房东名字:
private String name;
//房屋的地址:
private String address;
public Host(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public Object rentHouse(double money) {
System.out.println(“房东在租房,你交了”+money+“元的房租”);
return new Object();
}
}
没有中介直接租客租房:

public class Customer {//租客:
public static void main(String[] args) {
Host host = new Host(“张三”,“回龙观地铁口南400米,,,”);
Object o = host.rentHouse(2500);
System.out.println(o);
}
}
这个代码对租客 对房东都没有保障 ,不好,引入:中介:

中介:

package com.bjsxt.test05;
public class HouseProxy implements Rent {//中介
//中介为房东服务:
private Host host ;
public HouseProxy(Host host){
this.host = host;
}
@Override
public Object rentHouse(double money) {
kanfang();
kanjiahuanjia();
Object o = host.rentHouse(money);
weixiu();
return o;
}
private void weixiu() {
System.out.println(“每三周打扫公共区域”);
}
private void kanjiahuanjia() {
System.out.println(“尽力帮你花多少的钱,顺便中间商赚个差价。”);
}
private void kanfang() {
System.out.println(“随时看房,看租客的时间”);
}
}
有了中介后的租客代码:
public class Customer {//租客:
public static void main(String[] args) {
//跟中介接触:
HouseProxy hp = new HouseProxy(new Host(“张三”,“定海园”));
Object o = hp.rentHouse(3000);
System.out.println(o);
}
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!