普通的代理模式

本文通过一个生动的例子介绍了代理模式的概念及其实现方式。代理模式是一种结构型设计模式,它为一个对象提供一个代理来控制对该对象的访问。文章还探讨了代理模式的应用场景及其带来的好处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介:代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 –《Java与模式》

试想一个场景。我们身边的场景。有个叫华师家教中心的机构,还有一群想在周末做家教挣点零花钱的学生,由于学生们天天忙着上课和写作业,没有时间出去挨家挨户的登门造访询问家长是否需要家教帮忙辅导工作,学生挨家挨户的登门造访询问家长是否需要家教要做的一件事就是“问”。而恰恰家教中心却替代学生们做了这个“问”这件事。这就是代理。在这件是中,有三个角色,一是学生,一是家教中心,还有一个隐藏的角色—定义“问”这个“接口”。以下是代码:

1、接口:

public interface Interface {
    void doSomething();
    void somethingElse(String str);
}

2、真实的角色,类似上面情景的学生

public class RealObject implements Interface{

    @Override
    public void doSomething() {
        System.out.println("doSomething()");
    }

    @Override
    public void somethingElse(String str) {
        System.out.println("somethingElse:"+str);
    }

}

3、代理角色(家教中心)

public class SimpleProxy implements Interface{
    private Interface proxied;


    public SimpleProxy(Interface proxied) {
        this.proxied = proxied;
    }

    @Override
    public void doSomething() {
        System.out.println("代理里面的doSomething()方法"); 
        proxied.doSomething();
    }

    @Override
    public void somethingElse(String str) {
        System.out.println("代理里面的doSomething()方法");  //代理的时候额外做的事情
        proxied.somethingElse(str);
    }   
}

4、测试

public class SimpleProxyDemo {
    public static void consumer(Interface iface){
        iface.doSomething();
        iface.somethingElse("aa");
    }
    public static void main(String[] args) {
        consumer(new RealObject());
        consumer(new SimpleProxy(new RealObject()));

    }
}

什么时候会用到这种简单的代理模式,就是真实的角色不能直接被外界引用而却能代理角色引用。真实角色和代理角色实现了一个接口这很重要,这成了代理角色能代理真实角色的基础。

好处:
1、解决了真实角色不能直接被外界引用的问题
2、能在代理的时候额外增加一些代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值