1静态代理模式-java

1代理模式(Proxy pattern)
-核心作用:
  通过代理,控制对对象的访问!
  可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法方法做后置处理。

  AOP(Aspect Oriented Promarmming面向切片编程)的核心实现机制。


  - 核心角色:
    a.抽象角色
      -定义代理角色和真实角色的公共对外的方法
    b.真实角色
      - 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
      - 关注真正的业务逻辑
    c.代理角色
      - 实现抽象色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象对象方法,并可以附加自己的操作。
      - 将统一的流程控制放到代理角色中处理。

应用场景:
 a. 安全代理:屏蔽对真实角色的直接访问
 b. 远程代理:通过代理类处理远程方法调用(RMI)
 c. 延迟加载:通过加载轻量级的代理对象,真正需要再加载真实的对象


分类:
  静态代理(静态定义代理类)
  动态代理(动态生成代理类)
    a.JDK自带的动态代理
    b.javaassist字节码操作实现库
    c.CGLIB 
    d.ASM(底层使用指令,可维护性差)       


package com.mfz.proxy.staticProxy;

public interface Star {
    //面谈
    void confer();
    //签合同
    void signContract();
    //订票
    void bookTicket();
    //唱歌
    void sing();
    //收钱
    void collectMoney();
}

package com.mfz.proxy.staticProxy;

public class RealStar  implements Star {

    @Override
    public void confer() {
        System.out.println("RealStar.Confer(面谈)");
    }

    @Override
    public void signContract() {
        System.out.println("RealStar.singContract(签合同)");
    }

    @Override
    public void bookTicket() {
        System.out.println("RealStar.bookTicket(订票)");
    }

    @Override
    public void sing() {
        System.out.println("RealStar.sing(周杰伦唱歌)");
    }

    @Override
    public void collectMoney() {
        System.out.println("RealStar.collectMoney(收钱)");
    }
}


package com.mfz.proxy.staticProxy;

public class Proxy implements Star {

    private Star star;

    public Proxy(Star star) {
        this.star = star;
    }

    @Override
    public void confer() {
        System.out.println("Proxy.Confer(面谈)");
    }

    @Override
    public void signContract() {
        System.out.println("Proxy.singContract(签合同)");
    }

    @Override
    public void bookTicket() {
        System.out.println("Proxy.bookTicket(订票)");
    }

    @Override
    public void sing() {
        star.sing();
    }

    @Override
    public void collectMoney() {
        System.out.println("Proxy.collectMoney(收钱)");
    }
}

package com.mfz.proxy.staticProxy;

public class Client {

    public static  void main(String[] args){
        Star start = new RealStar();
        Star proxy = new Proxy(start);
        proxy.confer();
        proxy.signContract();
        proxy.bookTicket();
        proxy.sing();
        proxy.collectMoney();
    }
}


/*
Proxy.Confer(面谈)
Proxy.singContract(签合同)
Proxy.bookTicket(订票)
RealStar.sing(周杰伦唱歌)
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值