Java之静态代理

简介

网上很多文章都会巴拉巴拉说一大通设计模式怎么怎么样,代理模式更是老生常谈。这里简单总结一下,然后就说明一下代码实现。

为什么需要代理,首先肯定的是原对象功能不够强大需要增强,又不想改变原来对象原来的拥有权和状态。房产中介就是一个例子,中介可以帮原本的对象代理看房,授权签约。那么为什么需要中介,究其原因就是个人资源有限,中介的传播资源速度更快,可以更快的实现房东需要租卖这一功能。实权依旧在房东这,过户签约必须要有房东,代理需要有房东的授权。清晰明了。

那通过java怎么实现代理呢,本文就只说静态代理,静态代理可利用Java语言的特性实现代理实现,前提是拥有一个统一的接口。

上代码:1.创建接口,2.创建一个实现类,3.创建一个代理类, 4.测试

1.接口

/**
 * 静态代理
 * 首先,声明接口,以及其抽象方法
 */
public interface InterfaceA {
    void exec();
}

2.原实现类

public class RealImplement implements InterfaceA{
    @Override
    public void exec() {
        System.out.println("我是实现类,这是我的执行方法");
    }
}

3.代理类

public class ProxyImplement implements InterfaceA {
     private InterfaceA interfaceA;

     public ProxyImplement(){
         interfaceA = new RealImplement();
     }

    @Override
    public void exec() {
        System.out.println("do sth before...");
        interfaceA.exec();
        System.out.println("do sth after...");
    }
}

4.测试

public class ProxyTest {
    public static void main(String[] args) {
        ProxyImplement proxyImplement = new ProxyImplement();
        proxyImplement.exec();
    }
}

测试结果:

控制待打印
do sth before…
我是实现类,这是我的执行方法
do sth after…
在这里插入图片描述

解析

1.Java设计模式的使用往往能灵活使用Java基础
2.静态代理的实现本质是利用了Java几个特性,而根本呢就是灵活使用面向对象的一些特性

Java是面向对象的语言,拥有多态,父类可以调用子类实现
Java接口是统一的规范
Java调用对象除了方法传参,还有直接使用类中的成员对象
可以通过构造方法初始化我们的成员对象

细节分析

上面的例子就是完美体现,两个实现类实现同样的接口,方法名一致。在代理类的构造方法里面实例我们的接口,而且是使用原实现类new的,这样我们就这样我们就可以使用成员调用子类方法,并将其放回同样的方法名字中,即可以实现功能增强,又不需修改原实现类的一点代码。对于老项目的一大块代码,动又不敢动,这就是最佳实践啦。当然缺点也是有缺点的,就只能代理一个对象,想要更强大的增强就需要使用动态代理了。

当然还有几种写法无外乎就是成员直接使用的原实现类,又或者使用有参构造,又或者两者结合使用,本质是类似的。玩的就是Java的成员构造接口。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值