代理模式,看这名字就知道重点是代理。所谓代理,可以理解为中介或者中间人
例如:小明喜欢一个好看的菇凉但不好意思,找到朋友小蓝像好看菇凉送礼物。这个时候小蓝就是这个代理
使用代理模式 需要了解三个东西
抽象角色: 接口或者抽象类要什么真实角色实现的业务方法(送花送礼物)
代理角色:实现抽象角色,是真实角色的代理,可以实现真实角色的实现的抽象方法,从而形成代理
真实角色:实现抽象角色的方法或者功能,让代理角色实现这些功能
代码如下:
抽象角色
interface GiveGift {
void Give();
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
代理角色
public class Proxy implements GiveGift {
Pursuit pursuit = null;
public Proxy(SchoolGirl mm){
this.pursuit = new Pursuit(mm);
}
@Override
public void Give() {
pursuit.Give();
}
@Override
public void GiveDolls() {
pursuit.GiveDolls();
}
@Override
public void GiveFlowers() {
pursuit.GiveFlowers();
}
@Override
public void GiveChocolate() {
pursuit.GiveChocolate();
}
}
真实角色
public class Pursuit implements GiveGift {
SchoolGirl schoolGirl = null;
public Pursuit( SchoolGirl schoolGirl ){
this.schoolGirl = schoolGirl;
}
@Override
public void Give() {
System.out.println("喜欢的女孩-->"+schoolGirl.getName());
}
@Override
public void GiveDolls() {
System.out.println("送洋娃娃");
}
@Override
public void GiveFlowers() {
System.out.println("送你鲜花");
}
@Override
public void GiveChocolate() {
System.out.println("送你巧克力");
}
}
这是一个好看的菇凉
public class SchoolGirl {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在main方法中实现
SchoolGirl schoolGirl = new SchoolGirl();
schoolGirl.setName("好看菇凉");
Proxy proxy = new Proxy(schoolGirl);
proxy.Give();
proxy.GiveChocolate();
proxy.GiveDolls();
proxy.GiveFlowers();
好看菇凉在不知道小明的情况下就通过小蓝得到了小明的礼物。
为了更好的解释这个,决定百度百科
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。