java设计模式学习笔记3 代理模式-静态代理

代理的作用是:为其他对象提供一种代理用以控制这个对象的访问。代理可以起到一种中介的作用。

 代理模式有三个角色

1 抽象角色:是真实角色和代理角色真实的接口。

2 代理角色:含有对真实角色的引用,可以操纵真实角色,在封装真实角色的同时可以附加其他操作

3 真实角色:代理角色所代表的真实对象,是最终要引用的对象。

代理模式分为静态代理模式和动态代理模式,先说静态代理模式

一、建一个抽象角色,可以用抽象类,也可以用接口

/**
 * Created by charleszhu on 14-2-15.
 * 抽象角色
 */
public interface Subject {

    public void request();

}

二、新建真实角色,实现抽象角色

/**
 * Created by charleszhu on 14-2-15.
 * 真实角色
 */
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("realSubject invoked!!");
    }
}

三、新建代理角色,含有对真实角色的应用,可以封装其他附加操作

/**
 * Created by charleszhu on 14-2-15.
 * 代理角色
 */
public class ProxySubject implements Subject {

    private RealSubject realSubject;//代理角色内部持有真实角色的引用,用来操纵找真实结果

    @Override
    public void request() {
        // 可以封装附加操作
        this.before();

        if(null == realSubject){
            realSubject = new RealSubject();
        }
        realSubject.request();
        // 封装附加操作
        this.after();
    }

    // 代理角色可以增加新的功能
    public void before(){

        System.out.println("before request");

    }

    // 代理角色可以增加新的功能
    public void after(){

        System.out.println("after request");

    }
}

四、简单测试

/**
 * Created by charleszhu on 14-2-15.
 */
public class Client {

    public static void main(String[] args) {

        Subject ps = new ProxySubject();
        ps.request();

    }

}
输出结果:

before request
realSubject invoked!!
after request

然而java的静态代理在实际应用中又一些不足:

1,真实角色必须事先存在;2,一个真实角色必须又一个代理角色,大量使用会导致类的数目膨胀,3,若事先不知道真实角色,要如何代理?

这些问题可以用动态代理模式解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值