静态代理模式

Posted abel的博客

tags:

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

静态代理模式

所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了

举例理解:以结婚为例,当事人只需要处理自己的主要事儿即可,比如典礼、洞房,其他的杂事儿可以交给代理公司即可

静态代理需要满足三点:

1、需要有真实角色

2、需要有一个代理角色

3、这两个角色之间必须实现相同的接口

静态代理类优缺点
优点:真实角色也就是业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
缺点:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

 

直接上代码:

package designPattern;
/**
 * 静态代理
 * 1.真实角色
 * 2.代理角色
 * 3.两者之间实现相同的接口
 * @author hefei
 *
 */
public class StaticProxy {
    
    public static void main(String[] args) {
        //此处可用向上造型
        /*Marry*/ You you = new You();
        /*Marry*/ WeddingCompany company = new WeddingCompany(you);
        company.marry();
    }

}

//接口--需要实现的接口
interface Marry{
    /*public abstract*/ void marry();
}

//真实角色 只需要处理自己需要做的
class You implements Marry{
    @Override
    public void marry() {
        System.out.println("我和我媳妇儿结婚啦...");
        
    }
}

//代理角色 --处理除了真实角色做的之外的事儿
class WeddingCompany implements Marry{
    private Marry you;
    public WeddingCompany() {
        
    }
    public WeddingCompany(Marry you) {
        this.you = you;
    }
    
    @Override
    public void marry() {
        this.before();
        you.marry(); //正事儿需要调用真实角色,其他事代理角色处理
        this.after();
    }
    
    private void before(){
        System.out.println("布置典礼场景,准备酒席....");
    }
    private void after(){
        System.out.println("收拾桌椅,开始闹洞房....");
    }
}

 

以上是关于静态代理模式的主要内容,如果未能解决你的问题,请参考以下文章

代理模式之静态代理实现代码

设计模式代理模式 ( 静态代理 )

静态代理模式代码演示

Spring之代理模式

Spring之静态/动态代理模式

代理模式(动态)