模式源于生活:代理模式---中介租房
代理模式产生的原因:一、客户无法直接获得对象的引用来调用它的方法。二、代理需要对被代理的对象进行预处理或后处理。
以我找工作时租房未背景来阐述下中介中用到的代理模式:
对于租客我来说,我曾经跑到小区里转转,希望能看到贴着租房信息的小广告以便直接联系到房主,这样的话就可以省去中介的费用了。可是,转了几个小区了,发现现在的房东已经不流行在墙上贴小广告了,他们更愿意把房源信息放在中介那里,这样对于他们省时省力。
最后,我也只能通过中介来找到了我理想的房子,并付了半个月房租的中介费,心疼不已!
在我租房的过程中,我因为无法直接获得房主的信息而不得不通过中介来找到寻找房源。中介的作用是代理房东出租他们的房子。下面我们建立四个类来描述几者之间的关系:
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();
}
}
模式源于生活:代理模式---中介租房相关推荐
- 中介者模式、代理模式和外观模式的Pk
在学习设计模式的时候,发现这三个模式在一定程度上很是相似.所以总结一下,加以区分. (一)中介者模式. 所谓中介,在我们生活中很是常见,我们买房子可以有中介公司,找兼职也可以有中介公司. ...
- ANDROID的 BLUETOOTH 实现机制--中介模式和代理模式
原文http://blog.csdn.net/goohong/article/details/8005925 从ANDROID3.0开始BLUETOOTH API提供了对Bluetooth prof ...
- ANDROID的 BLUETOOTH 实现机制--中介模式和代理模式 .
转自:http://blog.csdn.net/GooHong/article/details/8005925 从ANDROID3.0开始BLUETOOTH API提供了对Bluetooth pro ...
- 面试官:策略模式和代理模式有什么区别?
大家好,我是田哥,昨天一哥们面试被问到代理模式,刚好,我也正在写<MyBatis源码分析:小白系列>专栏中的代理模式. 这里也说明一下,本文是MyBatis源码分析专栏中的一篇文章. 感兴 ...
- 适配器模式(包装模式)和代理模式的区别
适配器模式(包装模式)和代理模式的区别 一.简介 适配器模式:适配器模式(英语:adapter pattern)有时候也称包装样式或者包装.将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而 ...
- 结构型模式之代理模式
结构型模式之代理模式 代理模式 结构 静态代理 动态代理 动态代理和静态代理的区别 优缺点 使用场景 源代码 代理模式 一个对象A需要给某个对象B提供一个代理以控制对对象A的访问.这个时候访问对象C不 ...
- 装饰器模式和代理模式的区别
转载自 装饰器模式和代理模式的区别 学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是找了很多资料,想弄清 ...
- 装饰器模式与代理模式的区别_JS设计模式(三):装饰器模式、代理模式
Do more 做的更多,比你上级给你安排的任务! 前言 在<不止代码>中提到了几个程序员典型的思维误区: 「 拜大牛为师 」「 业务代码一样很牛逼 」「 上班太忙没时间学习 」 我之前也 ...
- 什么是工厂模式、代理模式?
什么是工厂模式.代理模式? 工厂模式 :实例化对象,用工厂方法代替new操作的一种模式. 代理模式 : 代理 :分为静态代理和动态代理:现有对象不能满足正常的开发需求,需要有一个能够代替现有对象提供服 ...
- 从一碗小米粥谈装饰器模式,代理模式的区别
代理与装饰器 场景描述 代理即代替意思,可替代原类的所有功能,即和原类实现相同的规范.代理模式和装饰器模式很像. 每天清晨起来,紧张的洗漱之后,来到楼下的早餐店,我通常都会要一碗小米粥,这时候盛粥的大 ...
最新文章
- 影像组学视频学习笔记(23)-主成分析PCA、降维和特征筛选的区别、Li‘s have a solution and plan.
- Matlab计算基站覆盖面积示例
- 哈尔滨工业大学计算机学院官网,哈尔滨工业大学计算机学院 唐好选 tanghx@hope.hit...
- 刷新DNS解析缓存+追踪+域名解析命令
- 悦虎144固件,华强北二代悦虎144固件,1562M芯片144固件
- 【转】Jenkins详细教程
- 【Java】递归删除文件目录
- Linux脚本Shell命令
- 【转】android内存溢出的解决方法
- Shared File System Master Slave 全配置以及测试
- html5用户注册页面代码,HTML5注册页面示例代码
- eclipse字体大小调整
- 计算机中丢失mplugin.dll,安装MathType时提示缺少Mplugin.dll文件
- java io流类图
- GIS 中地图分辨率与比例尺计算公式
- 直流DC稳压降压电源模块芯片简单对比
- 键盘数字测试软件,KeyboardTest(键盘测试工具)官方版
- 【Python】电商用户行为数据可视化分析实战
- VIPKID大米网校“学费交多少,由家长说了算”背后的实力自信
- SMO组织的现状与发展