1. 程式人生 > >靜態代理模式

靜態代理模式

準備 ride tro sta 自己的 字節 優缺點 存在 缺點

靜態代理模式

所謂靜態也就是在程序運行前就已經存在代理類的字節碼文件,代理類和委托類的關系在運行前就確定了

舉例理解:以結婚為例,當事人只需要處理自己的主要事兒即可,比如典禮、洞房,其他的雜事兒可以交給代理公司即可

靜態代理需要滿足三點:

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

靜態代理模式