java设计模式之代理模式(一)

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

运行效果图

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值