设计模式之代理模式

来源:互联网 发布:平面设计app软件 编辑:程序博客网 时间:2024/05/23 07:25

代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问。某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

这里写图片描述

代理模式角色介绍

  • Subject:抽象角色,定义公共接口。
  • RealSubject:真实角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
  • Proxy:代理角色,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作

代理模式结构是一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理。对象实现同一个接口,先访问代理类再访问真正要访问的对象。代理模式在生活的例子也不少,例如跨境代购、游戏代练、演员经纪人等等,这些都有代理的影子。这里以游戏里的代练为例,自己升级觉得非常费力,所以请了代练达到同样的目的。

代码示例

抽象主题类(玩家)

    public interface Player {        void play();    }   

真实主题类(真实玩家)

    public class RealPlayer implements Player{        public void play() {            System.out.println("打怪升级");        }    }

代理类(代理玩家)

    public class ProxyPlayer implements Player{        private RealPlayer realPlayer = new RealPlayer();        public void play() {            System.out.println("帮真实玩家代练");            realPlayer.play();        }    }

客户端

    Player proxyPlayer = new ProxyPlayer();    proxy.play();

代理模式中真实角色有可能没能力去与客户端直接操作,而通过代理去转达,比如让人去代购,因为我省了签证的麻烦。代理类就像客户端与真实角色建起的一座桥梁,将客户端要做的事让代理类去转达。就比如Java与C通信,就得有JNI负责转达。代理角色还可以在调用真实角色逻辑前做一些事情,就是常说的面向切片编程。代理模式运用非常广泛,很多著名大项目都有代理模式的存在。

代理模式分为静态代理、动态代理。静态代理是由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。动态代理的作用在这知乎上有讨论,同学们可以移步了解。
https://www.zhihu.com/question/20794107

0 0