入门设计模式之代理

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80871452 学习更多设计模式请参考:入门设计模式之汇总篇代理模式;给某个对象提供一个代理对象,由代理对象持有对原对象的引用。
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80871452


学习更多设计模式请参考:入门设计模式之汇总篇


代理模式;给某个对象提供一个代理对象,由代理对象持有对原对象的引用。


代理模式就比较符合中国人含蓄的性格,假如有个姑娘想要找个对象,但是直接满大街去喊我要找对象的不是很多吧。大部分的女孩还是倾向于先去找一个媒人,让媒人来给自己介绍对象。这里的媒人其实就是女孩的代理对象了。

先来看一下类图:


我们可以看到女孩跟媒人都实现了一个相亲的接口,然后呢媒人持有女孩的引用来调用女孩展示自己的方法,代码是这样的:

public interface BlindDate {
    public void show();
}

public class Girl implements BlindDate {

    @Override
    public void show() {
        System.out.println("女孩展示自己");
    }
}

public class MatchMaker implements BlindDate {
    BlindDate bd;

    MatchMaker(BlindDate bd){
        this.bd=bd;
    }

    @Override
    public void show() {
        System.out.println("媒人牵线搭桥");
        bd.show();
        System.out.println("媒人收取中介费");
    }
}

上方这种写法确实实现了代理模式,但是细心的你可能会发现,这不符合逻辑呀,媒人怎么能也有show方法呢,她是代理,没必要搞得跟女孩一样吧,所以呢又出现了下方的实现方式



代码实现:

public class DynamicMatchMaker {
    private Object girl;

    DynamicMatchMaker(Object girl) {
        this.girl = girl;
    }

    public Object getProxy() {
        return Proxy.newProxyInstance(
                girl.getClass().getClassLoader(),
                girl.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("媒人牵线搭桥");
                        Object returnValue = method.invoke(girl, args);
                        System.out.println("媒人收取中介费");
                        return returnValue;
                    }
                });
    }
}

这种实现看来其实还是可以的哈,满符合逻辑的,相当于找媒人获得了女孩的联系方式





本文出自https://zhixiang.org.cn/#/blog/read/5191ebb4-4ca2-44d4-ab74-ee1834ba547c,转载请保留。


学习更多设计模式请参考:入门设计模式之汇总篇


代理模式;给某个对象提供一个代理对象,由代理对象持有对原对象的引用。


代理模式就比较符合中国人含蓄的性格,假如有个姑娘想要找个对象,但是直接满大街去喊我要找对象的不是很多吧。大部分的女孩还是倾向于先去找一个媒人,让媒人来给自己介绍对象。这里的媒人其实就是女孩的代理对象了。

先来看一下类图:


我们可以看到女孩跟媒人都实现了一个相亲的接口,然后呢媒人持有女孩的引用来调用女孩展示自己的方法,代码是这样的:

public interface BlindDate {
    public void show();
}

public class Girl implements BlindDate {

    @Override
    public void show() {
        System.out.println("女孩展示自己");
    }
}

public class MatchMaker implements BlindDate {
    BlindDate bd;

    MatchMaker(BlindDate bd){
        this.bd=bd;
    }

    @Override
    public void show() {
        System.out.println("媒人牵线搭桥");
        bd.show();
        System.out.println("媒人收取中介费");
    }
}

上方这种写法确实实现了代理模式,但是细心的你可能会发现,这不符合逻辑呀,媒人怎么能也有show方法呢,她是代理,没必要搞得跟女孩一样吧,所以呢又出现了下方的实现方式



代码实现:

public class DynamicMatchMaker {
    private Object girl;

    DynamicMatchMaker(Object girl) {
        this.girl = girl;
    }

    public Object getProxy() {
        return Proxy.newProxyInstance(
                girl.getClass().getClassLoader(),
                girl.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("媒人牵线搭桥");
                        Object returnValue = method.invoke(girl, args);
                        System.out.println("媒人收取中介费");
                        return returnValue;
                    }
                });
    }
}

这种实现看来其实还是可以的哈,满符合逻辑的,相当于找媒人获得了女孩的联系方式





本文出自https://zhixiang.org.cn/#/blog/read/5191ebb4-4ca2-44d4-ab74-ee1834ba547c,转载请保留。


相关文章
|
4月前
|
设计模式 XML JSON
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
|
7月前
|
设计模式 缓存 安全
设计模式之代理模式的懂静态代理和动态代理
设计模式之代理模式的懂静态代理和动态代理
62 0
|
3月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
62 0
|
2月前
|
设计模式 缓存 安全
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
55 1
|
3月前
|
设计模式 安全 Java
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
多线程设计模式【线程安全、 Future 设计模式、Master-Worker 设计模式 】(一)-全面详解(学习总结---从入门到深化)
27 0
|
3月前
|
设计模式
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
|
5月前
|
设计模式 Java
设计模式之代理模式(静态&动态)代理
二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来——解耦。调用目标方法时先调用代理对象的方法,减少对目标方法的调用和打扰,同时让附加功能能够集中在一起也有利于统一维护。
24 0
|
6月前
|
设计模式 IDE 测试技术
【设计模式——学习笔记】设计模式前置知识:UML类图入门
【设计模式——学习笔记】设计模式前置知识:UML类图入门
34 0
|
9月前
|
设计模式 算法 前端开发
设计模式入门-工厂系列(保姆级教程)
设计模式入门-工厂系列(保姆级教程)
|
11月前
|
设计模式 大数据
大数据开发基础的设计模式的代理
代理模式是大数据开发基础的设计模式之一。它是一种结构型模式,用于为其他对象提供一种代理以控制对这个对象的访问。代理模式可以在不改变原始类代码的情况下,对原始类进行扩展或增强。
60 0