代理模式

发布时间: 更新时间: 总字数:778 阅读时间:2m 作者: IP上海 分享 网址

Provide a surrogate or placeholder for another object to control access to it.(为其他的对象提供一种代理以控制对这个对象的访问。)

代理模式介绍

通用类图如下:

proxy

  • 代理模式又被称作委托模式,它是一项基本设计技巧,实现分类
    • 静态代理
    • 动态代理
  • 许多其他的模式,如策略、访问者模式本质上是在更特殊场合采用了代理模式,在日常应用中,代理模式也可以提供非常好的访问控制。在Struts2中的Form元素映射中就采用了动态代理模式。

代理模式分析

优点:

  • 职责清晰。真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务。
  • 高扩展性,具体的主题角色可以随时变化,只要其实现了接口,不用管它如何变化,都可以使用接口来使用方法。

代理模式实现

Golang

Java

首先是一个公司的接口类,实现每个公司的简单功能:

public interface ICompany{
    //打上品牌
    public void brand(String brand);
    //出售
    public void sell();
}

public class Company implements ICompany{
    private String name = "";
    //构造函数获取名字
    public Company(String name){
        this.name = name;
    }

    //注册商标
    public void brand(String name){
        System.out.println("公司的名字是:"+name);
    }

    //出售产品
    public void sell(){
        System.out.println("最后三天清仓处理,买一箱送三箱。。。");
    }
}

最后是最重要的代理实现了:

public class Proxy implements ICompany{
    private ICompany cp = null;
    //通过构造函数传递代理的公司
    public Proxy(ICompany cp){
        this.cp = cp;
    }
    //代理在朋友圈打品牌
    public viod brand(String name){
        this.cp.brand(name);
    }

    //代理在卖东西
    public void sell(){
        this.cp.sell();
    }
}

好了,基本上实现就是这样了,最后友情送上场景类一个:

public class Client{
    public static void main(String[] args) {
        //卫龙辣条,我的最爱
        ICompany cp = new Company("卫龙");
        //定义一个代理,来卖辣条
        ICompany proxy = new Proxy(cp);
        //代理打品牌
        proxy.brand("卫龙");
        //代理出售
        proxy.sell();
    }
}

代理模式之应用场景

  • 远程代理:为一个对象在不同地址空间提供局部的代理代表。
  • 虚代理:根据需要创建开销很大的对象。
  • 保护代理:控制对原始对象的访问。
  • 智能指引:取代了简单的指针,它在访问对象时执行一些附加操作。
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数