帮忙干活,但不会一手包办,只是处理了一些杂碎的东西(不愿意干,或者干不了的事,代理对象)
注意这里是帮我干活,不会做别的事情
举个例子:
张三的经纪人:金计
导演找了张三的经济人让张三去拍电影
(无论外界想让我干什么,都要先经过我的经纪人,经纪人会在其中考虑收费,是否符合要求等问题)
在这里,经纪人就是代理,实际要拍电影的还是张三
注意这里是帮我干活,不会做别的事情
举个例子:
张三的经纪人:金计
导演找了张三的经济人让张三去拍电影
(无论外界想让我干什么,都要先经过我的经纪人,经纪人会在其中考虑收费,是否符合要求等问题)
在这里,经纪人就是代理,实际要拍电影的还是张三
总结代理模式:当前对象不愿意干的,没法干的东西交托给别的对象来做,我们只要做好本分的东西就行,Spring的AOP的底层就是通过代理模式来实现的
静态代理举个例子:
我现在是个普通程序员,写博客需要获得点击量好在跳槽的时候吹牛逼,但是自己写的话不一定有很多人点击,如果有个大佬(代理)帮忙点赞加收藏的话点击量应该可以飙升不少
以下是代码
首先是目录结构
然后每个模块的代码如下
首先Programer是一个接口,不管是动态代理还是静态代理,都需要定义接口
package cn.lichenyang.dao;
public interface Programer {
public void coding();
}
然后是self.java,实现了Programer类,自己编写代码
package cn.lichenyang.dao.impl;
import cn.lichenyang.dao.Programer;
//自己的目的是为了点击量,但是没办法推广自己,所以让大佬点赞自己的文章
//推广自己,以提高点击量
public class Self implements Programer{
@Override
public void coding() {
System.out.println("自己写代码。。。。。。。。");
}
}
然后是BigBrather.java类,为代理对象,作用是帮我获取点击量
package cn.lichenyang.dao.impl;
import cn.lichenyang.dao.Programer;
//大佬,扮演的角色是代理,只是为了帮忙
//(先让自己发文章,然后大佬点赞)
public class BigBrother implements Programer{
//创建一个自己的对象
private Self self;
//构造函数的作用在main方法中可以new一个BigBrother
//这里可以指定让别人发文章且点赞,如果是空参的构造方法,就不能指定让谁发文章和点赞
//只能针对一个人
public BigBrother(Self self){
this.self=self;
}
//大佬点赞加收藏
public void upvote(){
System.out.println("大佬点赞加收藏了,可以获得点击量了");
}
public void addMoney(){
System.out.println("要开始加钱了");
}
@Override//大佬的动作是1.让自己写文章,2.点赞收藏
public void coding() {
self.coding();//前处理
upvote();
//价钱方法
addMoney();//后处理
}
}
以下是测试类,测试是否运行成功
package cn.lichenyang.test;
import cn.lichenyang.dao.Programer;
import cn.lichenyang.dao.impl.BigBrother;
import cn.lichenyang.dao.impl.Self;
public class Test {
public static void main(String[] args) {
//想要点击量的自己
Self self = new Self();
//多态创建一个大佬对象
Programer programer = new BigBrother(self);
//大佬执行推广方法
programer.coding();
}
}
运行结果如下: