java之静态代理

java之静态代理

代理基础

代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。

这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.。

代理分为三种:静态代理、动态代理、Cglib代理

本文将要介绍的就是静态代理。

静态代理

静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类

通俗的说,当你去拜访一个著名人物时,你需要先访问他的管家或者经纪人,再通过他的管家或者经纪人去联系该著名人物。

这里我们定义一个User接口:

public interface User {
    public static final String gameName = "飞机大战";
    public void playGame();
}

然后我们的目标对象如下(著名人物):

public class UserInfo implements User{
    private int id;
    public String userName;
    private String password;
​
    public int getId(){
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
​
    public String getUserName() {
        return userName;
    }
​
    public void setUserName(String userName) {
        this.userName = userName;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
    public String toString(){
        return "[ID: "+this.id+" name: "+this.userName+" password: "+this.password+"]";
    }
​
    public String toString1(){
        return "[ name: "+ this.userName+" password: "+this.password;
    }
​
    public UserInfo(){}
    public UserInfo(int id,String userName,String password){
        this.password = password;
        this.userName = userName;
        this.id = id;
    }
    private UserInfo(int id,String password){
        this.id = id;
        this.password = password;
    }
​
    @Override
    public void playGame() {
        System.out.println(gameName);
    }
}

代理对象如下(管家):

public class UserInfoProxy implements User {
    private UserInfo target;
    public UserInfoProxy(UserInfo target){
        this.target = target;
    }
​
    @Override
    public void playGame() {
        doBefore();
        target.playGame();
        doAfter();
    }
    public void doBefore(){
        System.out.println("before....光头强打飞机....");
    }
    private void doAfter(){
        System.out.println("after....光头强打完飞机....");
    }
}

测试代码:

public class APP {
    public static void main(String[] args){
        UserInfo target = new UserInfo();
        UserInfoProxy proxy = new UserInfoProxy(target);
​
        proxy.playGame();
    }
}

静态代理总结:1、可以做到不在修改目标对象功能的前提下,对目标功能扩展2、缺点因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多,一旦增加方法,目标和代理对象都要维护

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值