您的位置:首页 > 编程语言 > Java开发

java 代理模式详解之静态代理

2017-01-18 00:51 267 查看
java的代理模式分为2种静态代理动态代理

代理模式的基本概念

真实角色 需要被代理的对象

代理角色 代理类

抽象角色 真实角色和代理角色需要共同实现的接口(可以理解为代理角色无法为真实角色做的事(方法))

静态代理

以租房为例 真实角色 是租房子的人 代理角色是中介 交租和签合同这两个行为为抽象角色

类似的案例还有买车的行为 顾客与4s店就存在这种代理关系还有婚庆公司的案例

代码示例

//抽象角色  代理角色无法为真实角色干的事情
public interface RentingHouseIn {
void rentingHouse();   //付租金
void signContract();   //签合同
}

//真实角色
public class Renter implements RentingHouseIn{  //租客

private String name;

public Renter(String name) {
this.name = name;
}
@Override
public void rentingHouse() {   //付租金
System.out.println(name + " 租房子  付租金");
}

@Override
public void signContract() {
System.out.println(name + "和房东签合同");
}

public String getName() {
return name;
}
}

//代理角色需要持有真实角色的引用(通俗点讲就是中介需要知道帮谁在租房)
public class Intermediary implements RentingHouseIn { //房产中介

private Renter renter;   //租客

public Intermediary(Renter renter) {   //通过构造器的方式这样中介就能知道在为谁做事
this.renter = renter;
}

@Override
public void rentingHouse() {
System.out.println("中介给"+renter.getName()+"找房源");    //代理类可以帮你做的事情

signContract();
renter.rentingHouse();    //这个就是无法被代理的  需要真实角色自己动手的

System.out.println("中介帮你。。。。");
}

@Override
public void signContract() {  //签合同
renter.signContract();
}

}

//测试类
public class TestClient {  //测试类
public static void main(String[] args) {
Renter renter = new Renter("张三");   //构造一个租客出来

//构造一个中介出来   代表  张三找中介租房  这中行为
Intermediary Intermediary = new Intermediary(renter);   //张三找中介
Intermediary.rentingHouse();//中介帮张三租房

System.out.println("-----------------------------");

Renter renter2 = new Renter("李四");

Intermediary Intermediary2 = new Intermediary(renter2);   //李四找中介
Intermediary2.rentingHouse();//中介帮李四租房
}
}

//测试结果
中介给张三找房源
张三和房东签合同
张三 租房子  付租金
中介帮你。。。。
-----------------------------
中介给李四找房源
李四和房东签合同
李四 租房子  付租金
中介帮你。。。。


静态代理总结

静态代理 3个基本概念 真实角色 代理角色 抽象角色(接口)

需要注意的是:抽象角色是指代理类无法为真实角色做的事情 把这些事情(行为) 封装进接口中

真实角色、代理角色实现相同的接口(抽象建角色)

代理角色必须持有对真实角色的引用(这样代理角色才能知道是在为谁做事)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java代理模式