首页 > 代码库 > 静态代理模式

静态代理模式

静态代理模式

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

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

静态代理需要满足三点:

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("收拾桌椅,开始闹洞房....");
    }
}

 

静态代理模式