设计模式之静态代理模式

代理指的是帮助真正的角色进行一些事情的处理,从而使真正的角色只需要专注于做自己的事情即可。举个例子,拿结婚这件事情来说,新郎就是真实的角色,而婚庆公司就是一个代理的角色,帮你忙前忙后,而你只需要拜天地,洞房就可以了。
静态代理的编程思路
1.需要一个接口,该接口规定了真实对象需要做的事情。
2.新建真实角色的类(新郎),实现上面的接口,重写接口中定义的方法。
3.新建代理类(婚庆公司),实现上面的接口,还需要定义需要为真实角色做的事情(为结婚服务的其他方法),需要一个目标对象(新郎)一般通过构造的方式将目标对象传进来,在重写的接口中的方法中调用目标对象重写的方法。
接下来我们看一下代码的实现:
共同的接口 IMarry:接口中只是定义了一个新婚快乐的方法

package cn.com.dh;

public interface IMarry {
   void happyMarry();
}

真实对象: 实现接口,重写方法。

package cn.com.dh;

public class Man implements IMarry{
    @Override
    public void happyMarry() {
        System.out.println("我们结婚了!");
    }
}

代理对象:实现共同的接口,定义一个目标对象,通过构造方法的方式传进来,定义了两个普通方法,结婚前的准备事情,结完婚闹洞房的事情(好像不太合理,哈哈 ,婚庆公司应该没有这项义务,就这样吧。。。),最后就是重写父接口中的happyMarry()方法,方法体中调用redy()方法,目标对象的happyMarry()方法,以及after()方法。

package cn.com.dh;

public class MarryCompany implements IMarry {
    private IMarry target;
    public MarryCompany(IMarry target){
        this.target = target;
    }
    @Override
    public void happyMarry() {
        ready();
        this.target.happyMarry();
        after();
    }
    private void ready(){
        System.out.println("婚庆公司为结婚之前的准备工作。。。");
    }
    private void after(){
        System.out.println("闹洞房。。。");
    }
}

OK 就这些,静态代理现在看起来其实也没有特别难,不知道自己为什么当时始终理解不了。
下面我们来写一个测试类测试一下:

package cn.com.dh;

public class StaticProxy {
    public static void main(String[] args) {
        new MarryCompany(new Man()).happyMarry();
    }
}

控制台输出:

婚庆公司为结婚之前的准备工作。。。
我们结婚了!
闹洞房。。。

Process finished with exit code 0

好啦,希望喜欢的朋友多多点赞,提出意见,让我们共同进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值