本人刚从大学毕业,工作经验不到半年,之前在学校学的算是马马虎虎吧。虽然C、C++、OC、Java都有过学习,不过都是马马虎虎,应付考试,但现在不同了,进入了公司参加了工作,一切都要从需求出发,解决问题,所以我又重新自学一边java,这次学习主要就放在设计模式上,本博客应对的都是**对java知识有过一丁点基础的小白**,在这里我和大家共同学习共同进步吧。
代理模式,之前学习OC语言时常常接触这个设计模式,但是那是也是不知其所以然,只知道分成代理方和工作方,代理方去帮助工作方找工作,而工作方负责去干活,有点类似于中介的意思,但是对其好处那时是一无所知,如今,读了《设计模式》一书,慢慢的了解到了设计模式的美,也懂得了在自己写代码时慢慢使用到这些手段,下面就和大家共同学习一下“代理模式”吧。
看书上说,代理(Proxy)模式,是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象去控制元对象的引用。
我们先看下代理模式的UML类图:

具体是用方法是:
新建完一个java工程之后(版主用的时eclipse),新建一个接口interface(以Jiekou为例),在接口中定义一个public的方法;
在新建一个类ProxyClass类作为代理类,实现接口implements,在该类中,私有化一个接口类的实例private Jiekou jiekou = null,并写一个方法来传入这个实例public ProxyClass(Jiekou jiekou){this.jiekou = jiekou},并重写接口中的public方法。并让这个实例对象去调本身的这个方法;
在新建一个类RealClass,这个类就是实际上工作的那个类。也实现接口implements,@Override重写接口中的类方法,并在方法体中去书写你要做的事情的逻辑。
在客户端Client中,先创造出代理类的实例,public static ProxyClass paoxy = null;写一个静态方法,比如找工作 public static void zhaoGZ() {RealClass real = new RealClass();proxy = new ProxyClass(real);proxy.interface中的方法},然后再main函数中进行调用这个静态方法即可。
下面我就演试一下java使用代理的小例子。就举中国历史上很有名的荆轲刺秦的故事来说明吧。秦王一统六合,灭国无数,其中燕国岌岌可危,再加上燕太子丹曾经在秦国做过俘虏,甚为厌恶亲王,所以太子丹筑起黄金台,招徕天下勇士,以期能一举刺杀亲王。其中荆轲就是来应聘这个职位的。可惜没有成功。下面就来用代码实现一下:
package lvsl.proxy.myself;
public interface ShaQinWang {
// 写一个公共方法
public void killWithSword();
}
package lvsl.proxy.myself;
public class TaiZiDan_Proxy implements ShaQinWang {
// 私有化实例
private ShaQinWang sha = null;
// 传入这个实例
public TaiZiDan_Proxy(ShaQinWang sha) {
this.sha = sha;
}
@Override
public void killWithSword() {
// TODO Auto-generated method stub
this.sha.killWithSword();
}
}
package lvsl.proxy.myself;
public class JingKe implements ShaQinWang {
@Override
public void killWithSword() {// 写具体做事情的逻辑
// TODO Auto-generated method stub
System.out.println("秦舞阳惧,秦王生疑");
System.out.println("图穷而匕首现,惜乎哀哉,终未能杀秦王");
}
}
package lvsl.proxy.myself;
public class XianYangCheng {// 客户端调用
// 代理类的实例 (燕太子丹献城与樊於期头于秦始皇)
public static TaiZiDan_Proxy taizidan = null;
public static void ciSha() {
JingKe jingke = new JingKe();
taizidan = new TaiZiDan_Proxy(jingke);
taizidan.killWithSword();
}
public static void main(String[] args) {
ciSha();
}
}
运行效果:
java设计模式之代理模式(一)
最新推荐文章于 2025-04-09 16:11:24 发布
&spm=1001.2101.3001.5002&articleId=52994198&d=1&t=3&u=76bd2f27b1e44ebc88e52db6621b5008)
3649

被折叠的 条评论
为什么被折叠?



