Java 设计模式之代理模式

定义:

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

通俗理解:

现实生活中需要找一个中介帮忙完成某项任务,这个中介就是代理对象。

例如:买火车票不一定要去火车站买,可以通过12306网站或者去售票点购买。

优点:

1、代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用。

2、代理对象可以扩展目标对象的功能。

3、代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性。

缺点:

1、代理模式会造成系统设计中类的数量增加。

2、在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢。

3、增加了系统的复杂度。

使用动态代理可以解决以上缺点。

代理模式结构:

1、抽象主题类: 通过接口或者抽象类声明真实主题和代理对象实现的业务方法。

2、真实主题类: 实现类抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。

3、代理类: 提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

代码实现场景:

西门庆想找潘金莲,潘金莲不好意思答复,就找了王婆做代理。

上代码:

public interface KindWomen {
    
    public void makeEyesWithMan();

    public void happyWithMan();
}
public class PanJinLian implements KindWomen{
    @Override
    public void makeEyesWithMan() {
        System.out.println("潘金莲抛媚眼");
    }

    @Override
    public void happyWithMan() {
        System.out.println("潘金莲在和男人做那个.....");
    }
}
public class WangPo implements KindWomen{

    private KindWomen kindWomen;

    public WangPo() {
        this.kindWomen = new PanJinLian();
    }

    public WangPo(KindWomen kindWomen) {
        this.kindWomen = kindWomen;
    }

    @Override
    public void makeEyesWithMan() {
        this.kindWomen.makeEyesWithMan();
    }

    @Override
    public void happyWithMan() {
        this.kindWomen.happyWithMan();
    }
}
public class XiMenQing {

    public static void main(String[] args) {
        WangPo wangPo = new WangPo();

        wangPo.makeEyesWithMan();
        wangPo.happyWithMan();
    }
}

注:本文创作思路源于《设计模式之禅》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值