设计模式_04 代理模式

1. 代理模式
代理模式的作用:在某些情况下,我们无法和目标直接进行接触,这时候就得依靠中介来进行达到接触的目的。代理模式能屏蔽真实行为的访问,让程序更加安全。为其他对象提供一种代理以控制这个对象的访问。
 代理模式的实现:
<1>代理类和被代理类(真实对象)要实现同一个接口。
<2>在代理类中持有一个被代理对象。
<3>在代理类中调用被代理类的真实行为。

 代理模式和装饰模式有点类似。但是装饰模式主要是对被装饰对象(真实对象)进行功能增强,而代理模式主要是对被代理对象(真实对象)进行控制。

2. 代理模式的案例
西门庆要找潘金莲,但是潘金莲不好意思答复啊,这时候怎么办,找王婆做代理。
潘金莲(被代理对象)和王婆(代理对象)实现的共同接口:

//定义一种风流的女人的类型,潘金莲和王婆都属于这类人。
public interface KindWoman {
    //这类女人能干吗呢?
    public void throwEye();//抛媚眼

    public void happyWithMan();//和男人那个。。。。
}

被代理对象(潘金莲):

//潘金莲---被代理(实现了风流的女人类型)
public class Pjl implements KindWoman{
    public void throwEye(){
        System.out.println("潘金莲抛媚眼");
    }
    public void happyWithMan(){
        System.out.println("潘金莲和男人搞事情。。。");
    }
}

代理对象(丑陋的王婆):

//王婆---------代理
public class Wp implements KindWoman{
    private KindWoman woman;

    public Wp(){
        //默认是潘金莲的代理。
        this.woman = new Pjl();
    }

    //王婆能给属于这个接口类型的人做代理,只要你是这类人
    public Wp(KindWoman woman){
        this.woman=woman;
    }

    public void throwEye() {
        //在这里做操作,可以控制是否调用真实行为。
        woman.throwEye();
        //在这个位置。可以在真实行为完成后,再做操作。
    }

    public void  happyWithMan() {
        //自己老了,干不了,叫年轻的代替。
        woman.doSomething();
    }
}

男一号西门庆登场:

public class Xmq {
    public static void main(String[] args) {
        //主角潘金莲出场
        KindWoman woman = new Pjl();
        //把王婆叫出来。
        Wp wp = new Wp(woman);
        //西门庆说想和潘金莲搞事情,然后王婆就去帮西门庆安排。
        wp.happyWithMan();
        wp.throwEye();
    }
}

3. 总结
 代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口呗。
 
3. 身边小常识
你可能觉得代理模式离我们很远,其实我们身边很多地方都用到了代理。比如你打开一个页面,页面里面有文字、图片等等信息。而我们打开页面的时候肯定是先看到文字,图片用一张破图等代替,最后破图才变成原来的图片。这便是一种代理模式,破图存储了原来图片的尺寸大小,不过是得等它下载下来。先用破图来代替,免得浏览器一直在等着下载图片,影响性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值