静态代理模式
静态代理模式
所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了
举例理解:以结婚为例,当事人只需要处理自己的主要事儿即可,比如典礼、洞房,其他的杂事儿可以交给代理公司即可
静态代理需要满足三点:
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("收拾桌椅,开始闹洞房...."); } }