没理由学不会的Java静态代理模式

学习代理模式之前一定要清楚一个点:什么是代理模式,即代理对象是目标对象的扩展,并且代理对象会调用目标对象。

静态代理模式在使用时,必须定义接口或者父类,并且代理对象与目标对象必须一起实现相同的接口或者继承相同的父类。

在这里,代理对象和目标对象不实现共同的接口或继承相同的父类也同样能够调用目标对象的方法,但是实现了相同的接口或继承相同的父类就能保证代理对象和目标对象有相同的约束,这样才符合代理的意义(就像买电脑,如果代理商和厂家达不成协议,代理商就无法替厂家代理)。

下面以客户买电脑为例,实现静态代理模式:

代理类和目标类都要实现的接口:

package proxy.staticProxy.proxy;

/*
* 静态代理模式
* */
public interface UserDao {
    void buy(double money);
}

目标类:

package proxy.staticProxy.proxy;

public class UserDaoImpl implements UserDao {
    public void buy(double money) {
        System.out.println("厂家收到的货款是: " + money);
    }
}

代理类:

package proxy.staticProxy.proxy;

public class UserProxy implements UserDao {

    private UserDao userDao;

    public UserProxy(UserDao userDao) {
        this.userDao = userDao;
    }

    public void buy(double money) {
        //代理赚取20%的利润,80%给给厂家
        System.out.println("代理商赚取了20%的利润,利润总值为: " + money * 0.2);
        userDao.buy(money * 0.8);
    }
}

测试类:

package proxy.staticProxy.proxy;

public class Test {
    public static void main(String[] args) {
        //目标对象
        UserDaoImpl userDao = new UserDaoImpl();
        //代理对象,把目标对象传给代理对象,建立代理关系
        UserProxy proxy = new UserProxy(userDao);
        //执行代理方法,在代理方法中做业务处理
        double money = 9000.0;
        System.out.println("客户出价9000购买笔记本电脑,9000元交到代理商手里");
        proxy.buy(money);
    }
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值