深入浅出设计模式之状态模式代理模式

Posted 软件猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入浅出设计模式之状态模式代理模式相关的知识,希望对你有一定的参考价值。

状态模式

当你开发的项目通常是由一个一个的状态以及状态之间的转换构成时,可以考虑使用状态模式。先看一下状态模式的类图,和适配器模式特别像 我们来拿深入浅出上面的糖果机来做例子,代码有点多,就不写了。可以自己下这本书来看。感觉还是挺好玩的。

代理模式

所谓的代理模式,就是用这个代理去代表某个对象,从而实现某些功能。比如这个代理是个监视器,负责监视代理对象的一些状态。或者你需要用这个代理获得远程对象的数据等等。 java中最典型的的代理模式就是RMI远程通信。RMI在客户端和服务器端都持有相同的一组接口,这组接口的实现在客户端,和服务器端有点区别。 我们来看看Java的RMI是如何实现的:


先不写了,代理模式也比较简单,RMI比较难

静态代理模式其实很常见,比如买火车票这件小事:黄牛相当于是火车站的代理,我们可以通过黄牛买票,但只能去火车站进行改签和退票。在代码实现中相当于为一个委托对象realSubject提供一个代理对象proxy,通过proxy可以调用realSubject的部分功能,并添加一些额外的业务处理,同时可以屏蔽realSubject中未开放的接口。


 

1、RealSubject 是委托类,Proxy 是代理类;
2、Subject 是委托类和代理类的接口;
3、request() 是委托类和代理类的共同方法;

具体代码实现如下:

interface Subject 
    void request();  class RealSubject implements Subject  public void request() System.out.println("RealSubject");   class Proxy implements Subject  private Subject subject; public Proxy(Subject subject) this.subject = subject;  public void request() System.out.println("begin"); subject.request(); System.out.println("end");   public class ProxyTest  public static void main(String args[])  RealSubject subject = new RealSubject(); Proxy p = new Proxy(subject); p.request();  
动态代理前面的文章写了,记住就好了。

以上是关于深入浅出设计模式之状态模式代理模式的主要内容,如果未能解决你的问题,请参考以下文章

《Head First 设计模式》之状态模式——糖果机

单例模式之代理模式

揭秘设计模式之代理模式

大型Java进阶专题设计模式之代理模式

代理模式

说说Java代理模式