一、代理模式分类
Java中代理模式分为两种:静态代理和动态代理,本篇文章主要介绍静态代理。
二、静态代理模式的构成
静态代理模式由三个部分构成:
- 一个公共的接口
- 一个被代理角色
- 一个代理角色
三、静态代理模式的实现
1. 创建公共接口
package com.design.pattern.proxy;
/**
*
* 出租房子接口
*
*/
public interface RentHouse {
/**
* 出租房子
*/
void rentHouse();
}
2.创建被代理角色
package com.design.pattern.proxy;
/**
* 房东
*/
public class Landlord implements RentHouse {
@Override
public void rentHouse() {
System.out.println("我是房东,我有房子要出租...");
}
}
3.创建代理角色
package com.design.pattern.proxy;
/**
*
* 中介
*
*/
public class Lntermediary implements RentHouse {
// 通过组合的方式与被代理类产生联系
private Landlord landlord;
public Lntermediary(Landlord landlord){
this.landlord = landlord;
}
@Override
public void rentHouse() {
System.out.println("我是中介,我帮房东出租房子...");
//调用房东的rentHouse()
landlord.rentHouse();
System.out.println("我是中介,房子出租成功,我收取一个月房租作为代理费...");
}
}
4.创建测试类
package com.design.pattern.proxy;
public class TestProxyStatic {
/**
* 静态代理测试
*/
public static void main(String[] args) {
//创建一个房东
Landlord landlord = new Landlord();
//创建一个中间商
Lntermediary lntermediary = new Lntermediary(landlord);
//客户也可以通过中介租房子
lntermediary.rentHouse();
}
}
5.运行结果
System.out: 我是中介,我帮房东出租房子...
System.out: 我是房东,我有房子要出租...
System.out: 我是中介,房子出租成功,我收取一个月房租作为代理费...
四、代理模式的定义
所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理对象,来间接的调用实际的对象。通俗的来讲代
理模式就是我们生活中常见的中介
五、为什么要有代理模式
- 隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
- 开闭原则:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。