廖雪峰历时3个月打磨出价值1980的数据分析教程,终终终于免费啦!

文章目录
  1. 1. 代理模式
    1. 1.1. 代理模式结构图

代理模式

  • 代理模式:为其他对象提供一种代理,以控制对这个对象的访问。
  • 代理应用的场合:

    • 远程代理:也就是为一个对象在不同的地址空间提供局部代理,这样可以隐藏一个对象存在于不同地址空间的事实。
    • 虚拟代理:是根据需要创建很大的对象,通过它来代理来存放实例化需要很长时间的真实对象,例如:网页加载图片。
    • 安全代理:用来控制真实对象访问时的权限,一般用于对象应有不同的访问权限的时候。
    • 智能指引:是指当调用真实对象时,代理处理另外一些事情。
  • 代码:(通过代理去追妹子的例子)

    public interface IGiveGift {
        void GiveDolls();
        void GiveFlowers();
        void GiveChocolate();
    }
    //此类中的@Data用到了lombok的注解,可以自动提供get  set方法,节省代码量
    //请参考“eclipse使用lombok”博客。
    import lombok.Data;
    public @Data class SchoolGirl {
        String name;
    }
    public class Pursuit implements IGiveGift {
        SchoolGirl mm;
        public Pursuit(SchoolGirl mm) {
            super();
            this.mm = mm;
        }
        public Pursuit() {
            super();
        }
        @Override
        public void GiveDolls() {
            // TODO Auto-generated method stub
            System.out.println(mm.getName()+"送你洋娃娃。");
        }
        @Override
        public void GiveFlowers() {
            // TODO Auto-generated method stub
            System.out.println(mm.getName()+"送你鲜花。");
        }
        @Override
        public void GiveChocolate() {
            // TODO Auto-generated method stub
            System.out.println(mm.getName()+"送你巧克力。");
        }
    }
    public class Proxy implements IGiveGift {
        Pursuit gg;
        public Proxy() {
            super();
        }
        public Proxy(SchoolGirl mm) {
            super();
            this.gg = new Pursuit(mm);
        }
        @Override
        public void GiveDolls() {
            // TODO Auto-generated method stub
            gg.GiveDolls();
        }
        @Override
        public void GiveFlowers() {
            // TODO Auto-generated method stub
            gg.GiveFlowers();
        }
        @Override
        public void GiveChocolate() {
            // TODO Auto-generated method stub
            gg.GiveChocolate();
        }
    }
    public class Test {
        public static void main(String[] args) {
            SchoolGirl mm = new SchoolGirl();
            mm.setName("小美");
            Proxy daili = new Proxy(mm);
            daili.GiveDolls();
            daili.GiveFlowers();
            daili.GiveChocolate();
        }
    }
    

代理模式结构图


代理模式结构图
  • Subject接口,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。

    public interface Subject{
        public void request();
    }
    
  • RealSubject定义Proxy所代表的真实实体,实现了Subject接口。

    public RealSubject implement Subject{
        public void request(){
            //真实请求
        }
    }    
    
  • Proxy类,保存一个实体的引用使得代理可以访问实体,并实现Subject的接口,这样就可以用来代替实体。

    public class Proxy implement Subject{
        RealSubject realSubject;
        public Proxy(){
            realSubject = new RealSubject();
        }
        public void request(){
            realSubject.request();        
        }
    }
    
  • 客户端代码:

    public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.request();
    }
    

科学上网(翻墙)教程!

更多精彩内容,请扫描二维码关注公众号:轮子工厂,公众号内回复:

1.回复【图书】:获取15本新手自学编程,零基础入门经典学习教材;
2.回复【我要造轮子】:获取100多本计算机类经典书籍;
3.回复【开发工具】:获取几大主流编程语言的开发工具~
4.回复【内推】:可帮你内推到大厂工作。
文章目录
  1. 1. 代理模式
    1. 1.1. 代理模式结构图