设计模式之代理模式

设计模式之代理模式

为别人做嫁衣

定义:

  Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对这个对象的访问)。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。

UML:

应用场景举例:

A追求C,让B帮A送礼物等。

代码实现:

首先创建一个女生SchoolGirl类

 1 package proxy01;
 2 
 3 public class SchoolGirl {
 4     private String name;
 5 
 6     public String getName() {
 7         return name;
 8     }
 9 
10     public void setName(String name) {
11         this.name = name;
12     }
13     
14 }
SchoolGirl.java

其次创建礼物IGiveGift接口

1 package proxy01;
2 interface IGiveGift{
3     
4     void giveDolls();
5     void giveFlowers();
6     void giveChocolate();
7 
8 }
IGiveGift.java

接着创建追求者Pursuit类

 1 package proxy01;
 2 
 3 public class Pursuit implements IGiveGift{
 4 
 5     SchoolGirl girl;
 6     public Pursuit(SchoolGirl schoolGirl) {
 7         girl=schoolGirl;
 8     }
 9     @Override
10     public void giveDolls() {
11         // TODO Auto-generated method stub
12         System.out.println(girl.getName()+" doll");
13     }
14 
15     @Override
16     public void giveFlowers() {
17         // TODO Auto-generated method stub
18         System.out.println(girl.getName()+" flower");
19     }
20 
21     @Override
22     public void giveChocolate() {
23         // TODO Auto-generated method stub
24         System.out.println(girl.getName()+" chocolate");
25     }
26 
27 }
Pursuit.java

再创建Proxy代理类

 1 package proxy01;
 2 
 3 public class Proxy implements IGiveGift {
 4     Pursuit pursuit;
 5 
 6     public Proxy(SchoolGirl schoolGirl) {
 7         // TODO Auto-generated constructor stub
 8         pursuit = new Pursuit(schoolGirl);
 9     }
10 
11     @Override
12     public void giveDolls() {
13         // TODO Auto-generated method stub
14         pursuit.giveDolls();
15     }
16 
17     @Override
18     public void giveFlowers() {
19         // TODO Auto-generated method stub
20         pursuit.giveFlowers();
21     }
22 
23     @Override
24     public void giveChocolate() {
25         // TODO Auto-generated method stub
26         pursuit.giveChocolate();
27     }
28 
29 }
Proxy.java

最终实现测试类

 1 package proxy01;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         SchoolGirl schoolGirl =new SchoolGirl();
 8         schoolGirl.setName("le");
 9         Proxy proxy=new Proxy(schoolGirl);
10         proxy.giveDolls();
11         proxy.giveFlowers();
12         proxy.giveChocolate();
13     }
14 
15 }
Main.java

 

初学《大话设计模式》

 

posted @ 2015-12-28 11:32  胖胖的半山兄  阅读(248)  评论(0编辑  收藏  举报