Java静态代理

一、代理概念

    简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用代理的技术,在不修改源代码的基础上,对程序进行增强:权限校验,日志记录,性能监控,事务控制。

二、代理模式介绍

(1)核心角色

①抽象角色(公共接口):定义公共对外方法

②真实角色(周杰伦):实现抽象角色,定义真实角色所实现的业务螺距。

③代理角色(代理人):实现抽象角色,时真实角色的代理,通过调用真实角色的方法来完成业务逻辑,并可以附加自己的操作。

三、源代码

(1)公共接口Star

package com.by.StaticProxy;
/*
  1.公共接口,里面是代理人和被代理人的所有方法
 */
public interface Star {
    /**
     * 公共接口:方便客户调用
     */
    /**
     * 面谈
     */
    void confer();
    /**
     * 签合同
     */
    void signContract();
    /**
     * 订票
     */
    void bookTicket();
    /**
     * 唱歌
     */
    void sing();
    /**
     * 收钱
     */
    void collectMoney();
}

(2)代理角色(经纪人) 

/*
 * Copyright (c) 2020, 2023, webrx.cn All rights reserved.
 *
 */
package com.by.StaticProxy;

/*
  代理角色实现公共接口,并实现里面的所有的接口方法
 */
public class ProxyStar implements Star{
    /*

     1.建立代理人和被代理人之间的练习,就是给代理人授权,让其代理,一般使用构造方法,
      将需要被代理的人传进去
     */
    private Star star;
    public ProxyStar(Star star){
      this.star=star;
    }

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

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

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

    @Override
    public void sing() {
        // 调用sing()方法
        star.sing();
    }

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

 (3)真实角色代码

/*
 * Copyright (c) 2020, 2023, webrx.cn All rights reserved.
 *
 */
package com.by.StaticProxy;


public class RealStar implements Star{

    @Override
    public void confer() {

    }

    @Override
    public void signContract() {

    }

    @Override
    public void bookTicket() {

    }

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

    @Override
    public void collectMoney() {

    }
}

(4)客户类代码


package com.by.StaticProxy;


public class Client {
    public static void main(String[] args) {
   /*
     1.创建真实角色的对象
    */
        Star star=new RealStar();
         /*
     2.创建代理类的对象,将真实角色对象作为参数传入
    */
        ProxyStar proxyStar=new ProxyStar(star);
         proxyStar.confer();
         proxyStar.bookTicket();
         proxyStar.sing();
         proxyStar.signContract();
        proxyStar.collectMoney();
    }
}

四、运行结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天的接口写完了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值