代理模式产生的原因:一、客户无法直接获得对象的引用来调用它的方法。二、代理需要对被代理的对象进行预处理或后处理。

以我找工作时租房未背景来阐述下中介中用到的代理模式:

对于租客我来说,我曾经跑到小区里转转,希望能看到贴着租房信息的小广告以便直接联系到房主,这样的话就可以省去中介的费用了。可是,转了几个小区了,发现现在的房东已经不流行在墙上贴小广告了,他们更愿意把房源信息放在中介那里,这样对于他们省时省力。

最后,我也只能通过中介来找到了我理想的房子,并付了半个月房租的中介费,心疼不已!

在我租房的过程中,我因为无法直接获得房主的信息而不得不通过中介来找到寻找房源。中介的作用是代理房东出租他们的房子。下面我们建立四个类来描述几者之间的关系:

1.Lender接口:它有一个出租的方法,房东和中介都要实现它。

public interface Lender
{
    public void lend();
}

2.Agency类:中介,中介持有多名房东的信息。并且提够一个search方法供租房者寻找他们的房源,通过search方法能找到房源对应的房东。

public class Agency implements Lender
{
    private List<Landlord> landlord_list = new ArrayList<Landlord>();
    private Landlord landlord;
    @Override
    public void lend()
    {
        if(landlord == null)
            System.out.println("没有你要找的房源");
        else
        {
            landlord.lend();
            System.out.println("出租成功!");
        }
    }
    public void find(float price, float area, boolean nice)
    {
        for(Landlord landlord : landlord_list)
        {
            if(landlord.getHouse_info().getPrice() == price)
            {
                if(landlord.getHouse_info().getArea() == area)
                {
                    if(landlord.getHouse_info().getNice() == nice)
                    {
                        this.landlord = landlord;
                        break;
                    }
                }
            }
        }
    }
    public List<Landlord> getLandlord_list()
    {
        return landlord_list;
    }
    public void setLandlord_list(List<Landlord> landlord_list)
    {
        this.landlord_list = landlord_list;
    }

}

3.Landlord:房东信息,房东提供自己的房源信息和自己的姓名

private HouseInfo house_info;
    private String name;
    public HouseInfo getHouse_info()
    {
        return house_info;
    }
    public void setHouse_info(HouseInfo house_info)
    {
        this.house_info = house_info;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public void lend()
    {
        System.out.println(name+"的房子正在出租!");
    }

4.HouseInfo:房源信息。房源信息包括价格、面积、是否精装修。

public class HouseInfo
{
    float price;
    float area;
    boolean nice;
    public float getPrice()
    {
        return price;
    }
    public void setPrice(float price)
    {
        this.price = price;
    }
    public float getArea()
    {
        return area;
    }
    public void setArea(float area)
    {
        this.area = area;
    }
    public boolean getNice()
    {
        return nice;
    }
    public void setNice(boolean nice)
    {
        this.nice = nice;
    }
}

客户端代码如下:

public class Client
{
    public static void main(String[] args)
    {
        //房源信息1
        HouseInfo info1 = new HouseInfo();
        info1.setPrice(2200);
        info1.setArea(55);
        info1.setNice(false);
        Landlord chuhao = new Landlord();
        chuhao.setHouse_info(info1);
        chuhao.setName("储昊");
        //房源信息2
        HouseInfo info2 = new HouseInfo();
        info2.setPrice(2300);
        info2.setArea(50);
        info2.setNice(true);
        Landlord liuyang = new Landlord();
        liuyang.setHouse_info(info2);
        liuyang.setName("刘洋");
        //中介
        Agency agengcy = new Agency();
        agengcy.getLandlord_list().add(liuyang);
        agengcy.getLandlord_list().add(chuhao);
        //向中介提供我要找的房源信息
        agengcy.find(2200, 55, true);
        agengcy.lend();
    }
}

模式源于生活:代理模式---中介租房相关推荐

  1. 中介者模式、代理模式和外观模式的Pk

       在学习设计模式的时候,发现这三个模式在一定程度上很是相似.所以总结一下,加以区分. (一)中介者模式.     所谓中介,在我们生活中很是常见,我们买房子可以有中介公司,找兼职也可以有中介公司. ...

  2. ANDROID的 BLUETOOTH 实现机制--中介模式和代理模式

    原文http://blog.csdn.net/goohong/article/details/8005925 从ANDROID3.0开始BLUETOOTH  API提供了对Bluetooth prof ...

  3. ANDROID的 BLUETOOTH 实现机制--中介模式和代理模式 .

    转自:http://blog.csdn.net/GooHong/article/details/8005925 从ANDROID3.0开始BLUETOOTH  API提供了对Bluetooth pro ...

  4. 面试官:策略模式和代理模式有什么区别?

    大家好,我是田哥,昨天一哥们面试被问到代理模式,刚好,我也正在写<MyBatis源码分析:小白系列>专栏中的代理模式. 这里也说明一下,本文是MyBatis源码分析专栏中的一篇文章. 感兴 ...

  5. 适配器模式(包装模式)和代理模式的区别

    适配器模式(包装模式)和代理模式的区别 一.简介 适配器模式:适配器模式(英语:adapter pattern)有时候也称包装样式或者包装.将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而 ...

  6. 结构型模式之代理模式

    结构型模式之代理模式 代理模式 结构 静态代理 动态代理 动态代理和静态代理的区别 优缺点 使用场景 源代码 代理模式 一个对象A需要给某个对象B提供一个代理以控制对对象A的访问.这个时候访问对象C不 ...

  7. 装饰器模式和代理模式的区别

    转载自 装饰器模式和代理模式的区别 学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是找了很多资料,想弄清 ...

  8. 装饰器模式与代理模式的区别_JS设计模式(三):装饰器模式、代理模式

    Do more 做的更多,比你上级给你安排的任务! 前言 在<不止代码>中提到了几个程序员典型的思维误区: 「 拜大牛为师 」「 业务代码一样很牛逼 」「 上班太忙没时间学习 」 我之前也 ...

  9. 什么是工厂模式、代理模式?

    什么是工厂模式.代理模式? 工厂模式 :实例化对象,用工厂方法代替new操作的一种模式. 代理模式 : 代理 :分为静态代理和动态代理:现有对象不能满足正常的开发需求,需要有一个能够代替现有对象提供服 ...

  10. 从一碗小米粥谈装饰器模式,代理模式的区别

    代理与装饰器 场景描述 代理即代替意思,可替代原类的所有功能,即和原类实现相同的规范.代理模式和装饰器模式很像. 每天清晨起来,紧张的洗漱之后,来到楼下的早餐店,我通常都会要一碗小米粥,这时候盛粥的大 ...

最新文章

  1. 影像组学视频学习笔记(23)-主成分析PCA、降维和特征筛选的区别、Li‘s have a solution and plan.
  2. Matlab计算基站覆盖面积示例
  3. 哈尔滨工业大学计算机学院官网,哈尔滨工业大学计算机学院 唐好选 tanghx@hope.hit...
  4. 刷新DNS解析缓存+追踪+域名解析命令
  5. 悦虎144固件,华强北二代悦虎144固件,1562M芯片144固件
  6. 【转】Jenkins详细教程
  7. 【Java】递归删除文件目录
  8. Linux脚本Shell命令
  9. 【转】android内存溢出的解决方法
  10. Shared File System Master Slave 全配置以及测试
  11. html5用户注册页面代码,HTML5注册页面示例代码
  12. eclipse字体大小调整
  13. 计算机中丢失mplugin.dll,安装MathType时提示缺少Mplugin.dll文件
  14. java io流类图
  15. GIS 中地图分辨率与比例尺计算公式
  16. 直流DC稳压降压电源模块芯片简单对比
  17. 键盘数字测试软件,KeyboardTest(键盘测试工具)官方版
  18. 【Python】电商用户行为数据可视化分析实战
  19. VIPKID大米网校“学费交多少,由家长说了算”背后的实力自信
  20. SMO组织的现状与发展

热门文章

  1. MySQL期末试题的答案
  2. sql查询语句 -牛客学习笔记
  3. RTSP基础之RTSP/RTP推流协议流程
  4. MySQL索引的数据结构及算法原理
  5. 数据库系统之:关系代数详解-超详细
  6. 中国羊奶皂市场趋势报告、技术动态创新及市场预测
  7. 四、nginx访问控制
  8. 超详细:将iPhone中音乐导出到电脑里的简单方法(完美支持最新iOS15.2系统)
  9. 什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?
  10. android之java程序性能优化