设计模式之代理模式

代理模式

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

这里写图片描述

代理模式角色介绍

  • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值