第7章《代理模式》

前端之家收集整理的这篇文章主要介绍了第7章《代理模式》前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

        

调用到了S的方法,只是不是自己直接调用,而是通过代理P调用的。

   

     

功能方法,故对RealSubject的某个方法的访问,就能转为Proxy同名的方法调用

功能方法里面调用RealSubject的同名方法,从而实现代理的功能

    

性能的最优化。比如,打开一个很大的HTML网页时,里面虽然有很多图片文字,但是还是可以很快打开,开始你看到的是所有的文字图片其实是一张张下载下来的。那些未打开的图片框,就是通过虚拟代理替代了真实的图片,此时代理保存了真实图片的地址和尺寸。

      

调用真实对象时,代理处理另外一些事情。如计算真实对象的引用次数,这样当对象没有引用时,可以自动释放它;或当第一次引用一个对象时,把它加入内存等等。它们都是通过代理在访问一个对象时附加一些内务处理。

功能方法功能方法包括:送巧克力,送花,送洋娃娃。      

         

SchoolGirl

/**

  • @Author: cxh
  • @CreateTime: 18/1/3 21:07
  • @ProjectName: JavaBaseTest
    */
    public class Client {
    public static void main(String[] args) {
    SchoolGirl girl=new SchoolGirl("黎敏");
    Proxy proxy=new Proxy(girl);
    //通过调用代理方法,间接调用Persuit的方法.
    proxy.giveFlowers();
    proxy.giveDolls();
    proxy.giveChocolate();
    }
    }


/**

  • @Author: cxh

  • @CreateTime: 18/1/3 20:58

  • @ProjectName: JavaBaseTest
    */
    public class Gift {
    //礼物接口
    Gift(){}

    void giveChocolate(){};
    void giveDolls(){};
    void giveFlowers(){};
    }



/**

  • @Author: cxh

  • @CreateTime: 18/1/3 21:00

  • @ProjectName: JavaBaseTest
    */
    public class Persuit extends Gift {
    private SchoolGirl schoolGirl;
    Persuit(SchoolGirl girl){
    this.schoolGirl=girl;
    }

    @Override
    public void giveChocolate() {
    System.out.println("persuit gives chocolate");
    }

    @Override
    public void giveDolls() {
    System.out.println("persuit gives dolls");
    }

    @Override
    public void giveFlowers() {
    System.out.println("persuit gives flowers");
    }
    }



/**

  • @Author: cxh

  • @CreateTime: 18/1/3 21:01

  • @ProjectName: JavaBaseTest
    */
    public class Proxy extends Gift {
    private Persuit persuit;
    Proxy(SchoolGirl girl){
    persuit=new Persuit(girl);
    }

    @Override
    public void giveChocolate() {
    persuit.giveChocolate();
    }

    @Override
    public void giveDolls() {
    persuit.giveDolls();
    }

    @Override
    public void giveFlowers() {
    persuit.giveFlowers();
    }
    }



/**

  • @Author: cxh
  • @CreateTime: 18/1/3 21:02
  • @ProjectName: JavaBaseTest
    */
    public class SchoolGirl {
    private String name;
    SchoolGirl(String name){
    this.name=name;
    }
    }

<span style="font-size:14px;">
输出


Process finished with exit code 0


<span style="font-size:14px;">

猜你在找的设计模式相关文章