设计模式之 代理模式

代理模式替原对象进行一些操作,比如我们在租房子的时候回去找中介,打官司我们需要请律师,因为律师在法律方面有专长,做饭需要找厨师!

还拿厨师和理发师的例子吧!

一个理发师不会做饭,一个厨子会做饭,他们都实现一个叫做Person的接口,一个理发师想做饭的话,必须请一个厨子帮忙!

二话不说上代码!


  1. public interface Person {  
  2.     public void cook();  

有做饭能力的厨子类

  1. public class Cook implements Person {  
  2.     @Override  
  3.     public void cook() {  
  4.         System.out.println("做饭去了");  
  5.     }  

本来不会做饭的理发师类,但是可以通过请一个厨师来做饭

[java]  view plain  copy
  1. public class Barber implements Person {   
  2.     private Cook mCook ;   

  3.     public Barber(){  
  4.         super();  
  5.         this.mCook = new Cook();  
  6.     }  
  7.     @Override  
  8.     public void cook() {      
  9.         System.out.println("before proxy!");  
  10.         mCook .cook();  
  11.         System.out.println("after proxy!");  
  12.     }  
  13. }  
测试代码

  1. public class ProxyTest {  
  2.     public static void main(String[] args){  
  3.         Person person new Barber();  
  4.         person .cook();  
  5.     }  

就这样啊!


总结:刚写完代理模式和装饰模式,也用了理发师和厨师的例子!看来很像,有什么差别呢!


装饰模式

装饰模式是为了给理发师装上一个做饭的功能,在建造好理发师的的对象是,并没有做饭的真正功能

他需要一个会做饭的对象,赋值个给他内部的接口引用,理发师才能有的功能

  1. public Barber(Person mPerson){  
  2.         super();  
  3.         this.mPerson = mPerson;  
  4. }  


所以理发师的做饭功能是动态的,不一定有,必须顶一个厨师对象赋给他,理发师才有做饭功能

  1.  public static void main(String[] args){  
  2.         Person person = new Cook();  
  3.         Person obj = new Barber(person);  
  4.         obj.cook();  
  5.     } 

而代理模式:

理发师在建造的时候已经跟一个厨师绑定在一起了!当理发师生成完成,他的做饭功能也就生成了!

一位他的构造函数里定义了一个厨师的对象

  1. private Cook mCook ;   

  2. public Barber(){  
  3.     super();  
  4.     this.mCook = new Cook();  
  5. }  


看看,理发师天生会做饭,哈哈

  1. public static void main(String[] args){  
  2.         Person person = new Barber();  
  3.         person .cook();  
  4.     }  






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值