您的位置:首页 > 其它

设计模式——静态代理

2018-11-07 15:52 197 查看

AOP的核心实现机制

通过代理,控制对对象的访问!核心业务自己做,其他统一的流程代码交给代理类处理!

就是通过proxy持有realObject的引用,并进行一层封装。

静态代理:

应用场景:

1.安全代理:屏蔽对真是角色的直接访问

2.远程加载:通过代理类处理远程方法调用

3.延迟加载:现价在轻量级的代理对象,真正需要时再加载真实对象。(比如要开发一个大文档查看软件,大文档中有大图片,在打开文件时不可能将所有的图片都显示出来,此时使用代理模式,当需要查看图片时,再用Proxy进行大图片的打开。)

背景:客户邀请某巨星在**典礼上表演一段!!!!!

[code]public interface Superstar {
/**
* 表演
*/
void perform();
}

/**
* 真正的巨星类,会表演
*/
public class Authentic implements Superstar {
@Override
public void perform() {
System.out.println("Authentic perform");
}
}

/**
* 巨星的经纪人陪同巨星一起去表演
* 他的表演不是真正的表演而是
* 在巨星表演之前,签合同
* 看巨星表演
* 在巨星表演之后,结算出场费
*/
public class Proxy implements Superstar{

Superstar superstar;
public Proxy(Superstar superstar) {
this.superstar = superstar;
}

@Override
public void perform() {
System.out.println("帮助巨星签合同");
superstar.perform();
System.out.println("帮助巨星结算演出费");
}
}

/**
* 客户邀请某巨星出席
* 只需要联系他的经纪人
*/
public class Client {
public static void main(String[] args) {
Superstar authentic = new Authentic();
Superstar proxy = new Proxy(authentic);
proxy.perform();
}
}

好处就是!!!

扩展原功能,不用修改原来的代码!

局限性:一个经纪人手下有多个明星。如果此时仍使用静态代理,可以通过以下方法实现功能。

1.一个明星用一个proxy    ,创建多个代理类 -------------------------------------导致proxy膨胀

2.通过创建一个proxy,持有不同的真实角色,同时实现Action1、Action2、Action3接口---------------------------一个类依赖太多接口

-

-

-

-

-

-

----------------------------下一章------用动态代理来解决!!!!

 

 

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: