入门设计模式之代理

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为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,转载请保留。


相关文章
|
7月前
|
设计模式 XML JSON
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
163 0
|
设计模式 缓存 安全
设计模式之代理模式的懂静态代理和动态代理
设计模式之代理模式的懂静态代理和动态代理
131 0
|
2月前
|
设计模式 Java
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
62 2
|
2月前
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
34 0
|
2月前
|
设计模式 传感器
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
44 0
|
2月前
|
设计模式 网络协议 Java
05.静态代理设计模式
《静态代理设计模式》详细介绍了静态代理的基本概念、原理与实现、应用场景及优缺点。主要内容包括静态代理的由来、定义、使用场景、实现方式、结构图与时序图,以及其在降低耦合、保护对象权限等方面的优势。同时,文章也指出了静态代理的局限性,如缺乏灵活性、难以复用、难以动态添加功能等,并介绍了动态代理如何弥补这些不足。最后,通过多个实际案例和代码示例,帮助读者更好地理解和应用静态代理模式。
42 4
|
7月前
|
设计模式 监控 安全
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
多线程设计模式【多线程上下文设计模式、Guarded Suspension 设计模式、 Latch 设计模式】(二)-全面详解(学习总结---从入门到深化)
115 0
|
3月前
|
设计模式 Java Spring
spring源码设计模式分析-代理设计模式(二)
spring源码设计模式分析-代理设计模式(二)
|
2月前
|
设计模式 算法 Java
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
【设计模式】策略模式(定义 | 特点 | Demo入门讲解)
30 0
|
3月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程