您的位置 首页 java

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();
    }
}  

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

文章来源:智云一二三科技

文章标题:Java 设计模式之代理模式

文章地址:https://www.zhihuclub.com/189168.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图