设计模式--代理模式
Posted NeverSayDie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--代理模式相关的知识,希望对你有一定的参考价值。
代理模式:
为其他对象提供一种代理以控制这个对象的访问。
组成:
- 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
- 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作,对真实角色加以控制。
- 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
优点:
- 职责明确:真实角色可以只做业务逻辑,其他控制可以用代理类完成
- 保护和控制真实角色:代理类作为调用者和真实角色的中介,可以有效的保护和控制真实角色。
- 容易控制:可以扩展不同的代理类,实现不同的目的,不需要修改真实角色的业务类。
缺点:
增加复杂度,多一个中介,降低速度
类图:
应用例子:
比如,你想追求一个女孩子,送礼物给她,但是你要先搞定她的闺蜜,闺蜜就相当于你的代理,闺蜜还可以看你表现控制是否送礼物给她。
下面是实现代码:
例子代码:
public class Girl { private String name; public Girl(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
public interface GiveGift { void giveFlower(Girl girl); void giveDolls(Girl girl); }
public class Suitor implements GiveGift { @Override public void giveFlower(Girl girl) { System.out.println("送给"+girl.getName()+"一朵花!"); } @Override public void giveDolls(Girl girl) { System.out.println("送给"+girl.getName()+"一个洋娃娃!"); } }
public class Proxy implements GiveGift { /** * 追求者 */ private Suitor suitor = new Suitor(); @Override public void giveFlower(Girl girl) { if(new Random().nextBoolean()){ suitor.giveFlower(girl); } } @Override public void giveDolls(Girl girl) { suitor.giveDolls(girl); } }
public class Test { public static void main(String[] args) { Girl girl = new Girl("坨坨"); GiveGift proxy = new Proxy(); proxy.giveFlower(girl); proxy.giveDolls(girl); } }
最终效果:
以上是关于设计模式--代理模式的主要内容,如果未能解决你的问题,请参考以下文章