代理模式,看这名字就知道重点是代理。所谓代理,可以理解为中介或者中间人
例如:小明喜欢一个好看的菇凉但不好意思,找到朋友小蓝像好看菇凉送礼物。这个时候小蓝就是这个代理使用代理模式 需要了解三个东西
抽象角色: 接口或者抽象类要什么真实角色实现的业务方法(送花送礼物)
代理角色:实现抽象角色,是真实角色的代理,可以实现真实角色的实现的抽象方法,从而形成代理
真实角色:实现抽象角色的方法或者功能,让代理角色实现这些功能
代码如下:
抽象角色
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).高扩展性