代理模式

设计模式-代理模式:

  常见的设计模式有:单例模式、工厂模式、装饰者模式、适配器模式、代理模式......这里就代理模式做一点自己平时积累的一个总结,之前找了一些这方面的一些知识讲解,发现说的都不怎么简单明了,只有下面的下这中介绍还比较简单明白。说到简单明白,我们的经理在平时的工作中,对我们讲过一句话,他说:任何的编程工作都是很简单的,你所遇到的问题都能以简单的方式进行处理,如果在你的实施下变得很复杂很麻烦的话,那么你就要反思你自己的思考方式是不是存在问题。

  首先,代理模式的作用是:为其他对象提供一种代理,用来可以控制这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象就可以在客户端和目标对象之间起到中介的作用。要是用生活中的实际例子来说明的话,那么潘金莲和西门庆的故事最形象,他们二人想成事,找来王婆做代理,撮合他们两人。外表看来就是王婆在做事,实际就是帮潘金莲达成目的。

  代理模式涉及到的角色:

  1.抽象代理:声明真实对象和代理对象的共同接口  

  2.代理角色:代理角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便于在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

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


  下面就用具体的代码来进行验证:

/**
 * 代理模式Demo
 * 定义一种女人,并定义能做的事情
 * @author Administrator
 *
 */
public interface KindWomen {

    public void makeEyesWithMan();//抛媚眼
    public void happyWithMan();//与男人。。。
}
/**
 * 定义潘金莲,实现女人的接口
 * 
 * @author Administrator
 *
 */
public class PanJinLian implements KindWomen{

    @Override
    public void makeEyesWithMan() {

        System.out.println("潘金莲抛媚眼。。");
    }

    @Override
    public void happyWithMan() {

        System.out.println("潘金莲与男人Happy!!");
    }

    
}
/**
 * 再定义一个代理人,王婆。为潘金莲代理
 * 
 * @author Administrator
 *
 */
public class WangPo implements KindWomen{

    private KindWomen kindWomen;
    
    public WangPo() {//默认是潘金莲的代理人。

        this.kindWomen = new PanJinLian();
    }
    
    //它可以是kindWomen的任何一个女人的代理,只要你是这一种类型
    public WangPo(KindWomen kindWomen){
        this.kindWomen = kindWomen;
    }
    
    @Override
    public void makeEyesWithMan() {

        this.kindWomen.makeEyesWithMan();//自己老了干不动,只能当当代理
    }

    @Override
    public void happyWithMan() {

        this.kindWomen.happyWithMan();
    }

}
/**
 * 两个女人出场了,接下来该男主角上场了。
 * 
 * @author Administrator
 *
 */

public class XiMenQing {
    public static void main(String[] args) {

        //把王婆叫出来
        WangPo wangPo = new WangPo();
        //然后说,要找潘金莲,王婆就安排
        wangPo.makeEyesWithMan();//表面上是王婆在做,其实背后享受的就是潘金莲
        wangPo.happyWithMan();
    }
}

 

  

  

原文地址:https://www.cnblogs.com/tyhJava/p/5936326.html