设计模式之代理模式
来源:互联网 发布:mac word繁体变简体 编辑:程序博客网 时间:2024/06/06 23:50
假如有个男生想要追求隔壁班一个女生,假如两个人认识的话,可以直接送礼物,抽象成代码如下:
class Pursuer { SchoolGirl mm; public Pursuer(SchoolGirl mm) { this.mm = mm; } public void giveFlowers() { System.out.println(mm.getName() + ", give you flowers"); } public void giveChocolate() { System.out.println(mm.getName() + ", give you chocolate"); }}class SchoolGirl { private String name; public SchoolGirl(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; }}public class Test { public static void main(String[] args) { SchoolGirl schoolGirl = new SchoolGirl("Mary"); Pursuer pursuer = new Pursuer(schoolGirl); pursuer.giveChocolate(); pursuer.giveFlowers(); }}
不过现在的问题是两者完全不认识,或者不想要让这两者直接认识,此时可以引入一个第三方代理,比如说认识这个女生的同桌,通过第三方代理作为两者的桥梁。
既然代理是双方的桥梁,则必须依赖于双方。
而代理是用来代替一方进行操作的,所以所具有的行为必须一致,只不过代理的行为实际上是调用了某一方的行为而已。因此还需要引入一个公共接口定义公共行为。
实现步骤如下:
1.首先定义一个代理者和被代理者共有的行为接口
public interface IPursue { void giveFlowers(); void giveChocolates(); void giveDolls();}
2.实现被代理者
public class Pursuer implements IPursue { SchoolGirl mm; public Pursuer(SchoolGirl mm) { this.mm = mm; } @Override public void giveFlowers() { System.out.println(mm.getName() + ", give you flowers"); } @Override public void giveChocolates() { System.out.println(mm.getName() + ", give you chocolates"); } @Override public void giveDolls() { System.out.println(mm.getName() + ", give you dolls"); }}
3.实现代理者,注意代理者的构造方法是创建了一个被代理者,然后进行的行为都是调用被代理者的方法。
public class PursuerProxy implements IPursue { private Pursuer pursuer; public PursuerProxy(SchoolGirl mm) { pursuer = new Pursuer(mm); } @Override public void giveFlowers() { pursuer.giveFlowers(); } @Override public void giveChocolates() { pursuer.giveChocolates(); } @Override public void giveDolls() { pursuer.giveDolls(); }}
4.进行调用
public class Test { public static void main(String[] args) { SchoolGirl schoolGirl = new SchoolGirl("Abby"); PursuerProxy proxyPursuer = new PursuerProxy(schoolGirl); proxyPursuer.giveChocolates(); proxyPursuer.giveFlowers(); proxyPursuer.giveDolls(); }}
代理模式将被代理者隐藏起来,暴露出代理者供外界调用。
参考:《大话设计模式》
阅读全文
0 0
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之 代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 设计模式之-----代理模式
- 设计模式之代理模式
- 设计模式之-代理模式
- 设计模式之代理模式
- 设计模式之代理模式
- 常见问题
- 常见的块状元素(block)与内联元素(inline)
- ORACLE数据库数据操作语言DML
- 第一次发博客,不知写点啥,就来个hello world吧!
- 【BZOJ】1030 [JSOI2007]文本生成器 AC自动机+DP
- 设计模式之代理模式
- 【回文串】835D Palindromic characteristics
- python 爬取网页的最基础三种方法
- php基础 unset()、isset()、defined()、empty()
- 走出第一步
- 牛顿迭代法在求解特征值问题中的应用
- Java Web中的Servlet及Filter
- Intent的显式与隐式
- 习题 2.4(7) 求两个数m和n的最大公约数。