java设计模式-代理模式

来源:互联网 发布:linux shell alias 编辑:程序博客网 时间:2024/06/06 13:55

1 接口  比如 鸡 鸭 都抽象为禽类

// 具有相同的特性的一类代理 将具有相同的方法的类的接口 抽象  lol玩家和英雄都有大招等技能

public interface Proxy {
    //重伤效果
    public void makeEyes();

    //大招
    public void happyWith();

}


2 代理类

玩家不能进入游戏中真实的厮杀  放技能  可以通过  英雄  例如EZ

public class EZProxy implements Proxy {

    private Proxy proxy;


    //默认的话时召唤师1的代理
    public EZProxy() {
        this.proxy = new ZhaoHuanShi1();
    }


    //可以时任何一个召唤师的代理
    public EZProxy(Proxy proxy) {
        this.proxy = proxy;
    }


    @Override
    public void makeEyes() {
        // TODO Auto-generated method stub
        //EZ说让召唤师1操作更666
        //        System.out.println("EZ 使用点燃了 重伤了 对手");
        this.proxy.makeEyes();
    }


    @Override
    public void happyWith() {
        // TODO Auto-generated method stub
        //EZ说让召唤师1操作更666
        //        System.out.println("EZ 使用大招了 打残了 对手");
        this.proxy.happyWith();
    }

}


3 被代理的 召唤师1


public class ZhaoHuanShi1 implements Proxy {


    @Override
    public void makeEyes() {
        // TODO Auto-generated method stub
        System.out.println("召唤师1 使用引燃 重伤了对手");
    }


    @Override
    public void happyWith() {
        // TODO Auto-generated method stub
        System.out.println("召唤师1 使用大招 打残了对手");
    }


}


4 被代理的召唤师2


public class ZhaoHuanShi2 implements Proxy {


    @Override
    public void makeEyes() {
        // TODO Auto-generated method stub
        System.out.println("召唤师2 使用w干对手了 ");


    }


    @Override
    public void happyWith() {
        // TODO Auto-generated method stub
        System.out.println("召唤师2 使用r 大杀特杀了");
    }


}


5 召唤师和英雄都已经选择好了

// 英雄和召唤师都选好了 现在开始pk
public class TestMain {
    /*
     * 代理模式主要使用了 Java 的多态,干活的是被代理类,代理类主要是 接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
     * 大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗
     */
    public static void main(String[] args) {
        //ez在屏幕上到达战场
        EZProxy ez = new EZProxy();
        ez.makeEyes();//表面上时ez在 释放技能 实际上时召唤师在玩耍
        ez.happyWith();


        ZhaoHuanShi2 z2 = new ZhaoHuanShi2();
        ez = new EZProxy(z2);
        ez.makeEyes();
        ez.happyWith();//表面上是ez大杀特杀 实际上时召唤师2在玩耍
    }
}


总结 : 代理模式主要使用了 Java 的多态,干活的是被代理类,代理类主要是 接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,
          大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口呗

原创粉丝点击