靜態代理模式
阿新 • • 發佈:2017-08-04
準備 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("收拾桌椅,開始鬧洞房...."); } }
靜態代理模式