Java二十三种设计模式中的代理模式

首先创建一个接口,来表示歌手,所有的歌手都会唱歌

public interface Sing {
    //所有的歌手都会唱歌
    void Sing();
}

远古时期。。。。有一个歌手,这个歌手唱的歌特别的经典,好听
所以实现歌手的接口

public class Singer implements Sing{
    //远古歌手
    @Override
    public void Sing() {
        System.out.println("经典歌曲");
    }
}

现在呢。。。有一个歌手要唱歌,上来就唱了一首经典歌曲曲来致敬远古大佬
当然他也是歌手,也要实现歌手唱歌这个接口

至于SingerProxy的构造方法我下面再解释

/**
 *  代理对象和目标对象实现相同的接口
 */
public class SingerProxy implements Sing{
    Sing sing;
    public SingerProxy(Sing s){
        this.sing = s;
    }
    @Override
    public void Sing() {
        System.out.println("观众们好,我唱一个");
        sing.Sing();
        System.out.println("谢谢再见");
    }
}

现在搞一个测试,开个演唱会 让当代歌手唱个歌
public class Test {

public class Test {
    public static void main(String[] args) {
        SingerProxy singerProxy = new SingerProxy(new Singer());
        System.out.println("演唱会");
        singerProxy.Sing();
    }
}

输出结果
在这里插入图片描述

执行顺序是这样的

  1. Test中
    SingerProxy singerProxy = new SingerProxy(new Singer())
    实例化现代歌手,把远古歌手唱的歌塞到SingerProxy的构造方法中

  2. 然后走输出演唱会

  3. 再走现代歌手对象的唱歌方法,之前已经把远古歌手唱的歌塞到构造方法中了,所以现代歌手再唱歌唱的就是经典歌曲了

其实代理模式,就是用一个新的类(现代歌手),把接口(歌手都要唱歌)以及实现类(远古歌手),重新编写一次,这个类就可以叫做代理类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值