java 设计模式之静态代理模式

来源:互联网 发布:抖腿的坏处 知乎 编辑:程序博客网 时间:2024/05/17 01:50

今天是2017年的第一天,又老了一岁,终于知道为啥小孩喜欢过年了,一个很重要的原因就是不担心过年意味着又老了一岁,

2017年的目标就是把2016吹的牛继续吹完,感觉压力很大,内心很是羡慕那些在读大学的同学们,没啥压力,现在才明白钱是买不回来青春的,所以在青春时候该做的事一定要做,不然等你过了青春很难再去做,因为各种压力让你的心态没青春时期的心态那样,不及后果的去做,这就是成长的代价,还是SHE那歌词写的好,越长大,越孤单,


2017年工作上的计划是希望在研究解析好的三方框架源码以及android本身的源码,这是我16年吹过的牛,只好等17年来还了,然后在一到二个专题下深入研究,因为毕竟不是刚开始工作,别人都问你用了什么框架,而是问你框架的实现原理,不然你出去面试怎么体现2年3或者4年的区别,最近我同事的组在招人,又的写4年,4年半,3年工作经验,被问的几乎什么都答不上来,而且还是比较简单的问题,至少我认为是不难得,如果你工作了4年这些问题都答不出来,你的竞争力在哪里,别人招一个2年的照样能干,工资还比你要的少一点,除非说你家里背景好,不靠工作去养活家里,工作只是爱好,那就没话说了,不是每个人都像王思聪那样,有个首富的老爸,程序员很多都是平凡的人,写这些也是告诫自己,不要等你发现问题时候已经晚了,时刻要提高自己,这样才能在这社会混到一碗饭吃,切入正题,今天讲下静态代理模式,


从名称上就可以看出代理,生活中代理到处都是,你去买房子,要跟中介打交道,租房也是一样,中介是没有自己的房子的,房子是开发商的,中介只是开发商授权了能卖房而已,所以静态代理有2个角色了,


抽象角色:声明真实对象和代理对象的共同接口(这只是对角色的行为做了一个抽取而已)

代理角色:

代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。

  同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装(有点类似包装模式或者叫装饰模式)

真实角色:代理角色所代表的真实对象,是我们最终要引用的对象


就拿王宝强当做例子吧,如果一个导演想请王宝强去演戏,那么一般都是联系他的经纪人,他的经纪人叫宋喆,这是以前的经纪人了,现在可定不是了,那么宋喆就是代理角色,而演戏肯定是王宝强自己了,所以王宝强是真实的角色,

现在通过代码体现下:


public interface Role {
void call();//打电话
void agree();//同意演这部电影
void goTheatre();//去剧场
void playact();//演戏
void goHome();//演完了回家
}

上面的Role是抽象出来角色的行为

王宝强(真实的角色)

/**
 * 真实角色
 * @author Adminis
 */
public class WangBaoQiang implements Role{
@Override
public void call() {

}
@Override
public void agree() {

}
@Override
public void goTheatre() {

}
@Override
public void playact() {
System.out.println("王宝强真在演士兵突击....");
}
@Override
public void goHome() {

}
}

宋喆代理角色:

public class SongZhe implements Role {
private WangBaoQiang laowang;
public SongZhe(WangBaoQiang laowang) {
super();
this.laowang = laowang;
}
@Override
public void call() {
System.out.println("你好是王宝强的经纪人么,这有部好的电视剧,想让王宝强演一个角色,肯定火,问下王宝强档期能否安排的开,你想啊,宋喆肯定是想王宝强去演,具体为啥,哈哈,地球人都知道");
}
@Override
public void agree() {
// TODO Auto-generated method stub

}
@Override
public void goTheatre() {

}
@Override
public void playact() {
//叫王宝强去演戏
laowang.playact();
}
@Override
public void goHome() {

}
}

导演(客户)

/**
 * 导演
 * @author Adminis
 *
 */
public class Director {
public static void main(String[] args) {
WangBaoQiang laowang = new WangBaoQiang();
SongZhe songZhe = new SongZhe(laowang);
songZhe.call();
}
}



0 0
原创粉丝点击