设计模式——静态代理

AOP的核心实现机制

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

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

静态代理:

应用场景:

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

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

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

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

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接口---------------------------一个类依赖太多接口

-

-

-

-

-

-

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

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值