- N +

代理模式之静态代理

代理模式之静态代理原标题:代理模式之静态代理

导读:

代理模式设计模式之代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到...

文章目录 [+]

代理模式

设计模式之代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。

在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

静态代理

静态代理是由程序员创建或特定工具自动生成源代码,再对其编译,在程序运行前,代理类的.class文件就已经存在了。

原理:

对普通一个接口与一直实现类在加入一个代理类,用于包装实现类中实现的方法,而业务使用方只需要实例化代理类,并传递需要代理的普通类即可。

优点

编译时生成代码,性能

缺点

  1. 一个代理类只能为一个接口服务,开发中必然会产生过多的代理

  2. 所有的代理操作除了调用的方法不一样之外,其他的操作都一样,则此时肯定是重复代码

代理模式 角色

抽象角色:声明真实对象和代理对象的共同接口。

代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。

同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

java 代码实例

首先是抽象角色类,定义一个接口或者抽象类

public interface Subject {
    
    /**
     * 真实对象和代理对象的共同接口
     * 
     */

    public abstract void request();
    
}

 之后是真实角色的类接口实现

/**
 * 真实角色  码友java技术分享站
 */
public class SubjectReal implements Subject{

    
    public void request() {
        // TODO Auto-generated method stub
        
        System.out.println("欢迎访问码友java技术分享");
        
    }

}


/**
 * 真实角色  码友社区
 */
class SubjectReal0 implements Subject{

    
    public void request() {
        // TODO Auto-generated method stub
        
        System.out.println("欢迎访问码友社区");
        
    }

}

定义代理角色,内部包含对真实角色对象的引用,并且封装功能:

class ProxySubject implements  Subject{
    
    /**
     * 代理真实角色  码友java技术分享站
     */
    private SubjectReal0 subjectReal01=new SubjectReal0();

    /**
     * 代理真实角色  码友社区
     */
    private SubjectReal subjectReal=new SubjectReal();
    
    
    public void request() {
        // TODO Auto-generated method stub
        
        subjectReal01.request();
        
        subjectReal.request();
        
    }

}

总结

如果要按照上述的方式(静态代理)使用代理模式,那么真实角色必须是实现已经存在的,并将其作为代理对象的内部属性。

  但是实际使用时,一个真实角色必须对应一个代理角色,但如果大量使用会导致类的急剧膨胀;此外,如果事先并不知道真实角色,该如何使用代理呢?这个问题可以通过Java动态代理来解决。


本文标题:代理模式之静态代理
本文链接:http://www.kyjszj.com/wdzl/26.html
作者授权:除特别说明外,本文由 开源技术之家 原创编译并授权 开源技术之家 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

有好的文章希望我们帮助分享和推广,猛戳这里我要投稿

返回列表
上一篇:
下一篇:

发表评论中国互联网举报中心

快捷回复:

    评论列表 (暂无评论,共579人参与)参与讨论

    还没有评论,来说两句吧...