java 代理模式

代理模式:

代理模式其实就是包装了真实的类,访问的时候最好使用包装类,在使用的时候中间隔了一层,就好像有时候你要找老板只能通过秘书来传达一样,秘书这里就可以理解为代理。


代理模式角色分为 4 种:
主题接口:定义代理类和真实主题的公共对外方法,也是代理类代理真实主题的方法;
真实主题:真正实现业务逻辑的类;
代理类:用来代理和封装真实主题;
Main:客户端,使用代理类和主题接口完成一些工作。




一个简单的静态代理demo:我们做个简单的,假设现在需要程序员,我们需要java程序员,java程序员的工作当然是codeing了。
但是对于项目不同,比如当前有个项目我们需要java程序员,但是我们希望项目开始的时候对程序员有个誓师大会,项目结束时候给程序员发个奖金。
那么这些工作是不能放在java程序员这个类中的。而且程序员也不希望这些个杂事来影响自己coding。那么我们就需要一个专业的助理来处理这些事情
这个助理就代为java程序员处理一些事情,而java程序员收到的任务就只有coding啦。 话不多说来看代码。


1.先定义一个接口,防止以后来了其他程序员。

public interface Coder {
    public void coding();
}
2.定义一个java程序员
public class JavaCoder implements Coder{
    @Override
    public void coding() {
        System.out.println("Writing java code");   
    }
}

3.接下来定义一个助理(也就是代理类)

public class CoderProxy implements Coder {
    
    private JavaCoder javaCoder;


    
    //1.先开会
    //2.写代码吧
    //3.项目结束发奖金
    @Override
    public void coding() {


        openMeeting();
        
        if (javaCoder == null) {
            javaCoder = new JavaCoder();
            javaCoder.coding();
        }
        distributeMoney();
    }
    private void openMeeting() {
        System.out.println("来来来开会啦!!");
    }
    private void distributeMoney() {
        System.out.println("来来来发奖金啦!!");
    }
}



final:测试一下
public class Test {
    
    public static void main(String[] args) {
        CoderProxy coderProxy = new CoderProxy();
        coderProxy.coding();
    }
}
结果:
=======================
来来来开会啦!!
Writing java code
来来来发奖金啦!!
=======================

以上就是静态代理,静态代理在实际使用的还是比较多的,比如我们要建立一个缓存机制,就可以使用静态代理。


比如想要从数据库中获取当前产品列表。
第一次从数据空中获取到之后,接下来请求都可以从缓存中读取,这样可以显著提高程序执行效率。


我们真正的数据库接口只负责从数据库中获取数据。
代理类第一步从本地缓存中读取,如果缓存中不存在数据,则从数据库中获取。


这样的做法,使的程序结构十分清晰,方便后期维护人员快速进入业务,即使以后新添加功能也能从容而定。不需要进行大量的修改











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值