设计模式之代理模式—静态代理

代理模式:利用一个代理对象将具体需要代理的对象包装起来,然后利用代理对象来取代具体对象,当需要操作具体对象时,都是通过代理对象来完成对具体对象的操作;

静态代理的核心:

1、代理类与具体类实现同一个接口,以便具有相同的行为;

2、代理类要持有具体类的引用,以便控制具体类进行操作;

以下是代码演示:

1、总接口:Person  定义其子类具有的相同的行为;

public interface Person {
    void setAge(int age);
    int getAge();
}

2、具体类:Jack 

public class Jack implements Person {

    private int age;

    public Jack(){
        System.out.println("正在使用构造函数生成本人实例");
    }

    @Override
    public void setAge(int age) {
        System.out.println("我是Jack,我将接收一个年龄age = "+age);
        this.age = age;
    }

    @Override
    public int getAge() {
        System.out.println("我是Jack,我将返回我的年龄age :"+age);
        return age;
    }
}

3、代理类: Proxy  

public class Proxy implements Person {

    //拿到具体对象的引用
    private Jack jack;

    public Proxy(Jack jack){
        this.jack = jack;
    }

    @Override
    public void setAge(int age) {
        System.out.println("我是代理类,我将先审核接收的年龄再决定是否给我的委托人jack"); //模仿代理类自己先要执行的逻辑
        jack.setAge(age);//控制具体执行类执行其方法
        System.out.println("我是代理类,我已经将接收到的年龄给我的代理人jack了");
    }

    @Override
    public int getAge() {
        System.out.println("我是代理类,我将要通知jack返回他的年龄");
        return jack.getAge();
    }
}

4、测试

public class StaticProxyTest {

    public static void main(String[] args) {
        //开始对jack进行代理
        System.out.println("----------开始对jack进行代理--------------");
        Person person = new Proxy(new Jack());
        //设置一个年龄,完成代理
        person.setAge(12);
        //获取一个年龄
        System.out.println("---------开始利用代理类获取年龄------------");
        int age = person.getAge();
        System.out.println("age = " + age);
    }

}

结果:

5、总结:

1、代理类与具体类实现同一个接口,以便具有相同的行为;

2、代理类要持有具体类的引用,以便控制具体类进行操作;

3、代理类实例化具体类有很多种方式,究其重点就在于在合适的时候去实例化具体类,以便合理的控制具体类进行操作;

4、静态代理一个重大的缺点就是,好比一对一服务一样,每一个需要被代理的具体类,都需要一个新的代理类,会增加系统复杂性,资源消耗;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值