设计模式之静态代理模式

来源:互联网 发布:机器人单片机 编辑:程序博客网 时间:2024/06/05 06:30

像平时租房子时,不用自己一间一间的找,一般都是找到中介,给中介说我要租什么样的房子,比如大小,房屋的朝向,有没有独卫等等,中介就直接帮我们找好了。中介在这里就扮演代理的角色,我们租房子的就是真实角色。

静态代理也有一些要求:1.要有真实角色。2.要有代理角色。3.两者实现相同的接口,向代理传入真实角色的引用。4.调用代理的方法。

写一个小例子

package com.staticProxy;public class StaticProxy {public static void main(String[] args) {//创建真实角色Marry you = new You();//创建代理角色+真实角色的引用Marry weddingCompany = new WeddingCompany(you);//调用weddingCompany.marry();}}//共同的接口interface Marry{void marry();}//真实角色class You implements Marry{@Overridepublic void marry() {System.out.println("you and 嫦娥结婚了。。。。");}}//代理角色class WeddingCompany implements Marry{private Marry you;//空构造函数public WeddingCompany() {}//带参构造函数public WeddingCompany(Marry you) {this.you = you;}private void before(){System.out.println("布置猪窝。。。");}private void after() {System.out.println("闹伴娘玉兔。。。");}@Overridepublic void marry() {before();you.marry();after();}}
运行出来是
布置猪窝。。。you and 嫦娥结婚了。。。。闹伴娘玉兔。。。
结婚的还是你自己。

我们写多线程时,也是用到了静态代理,实现Runnable接口,重写run()方法,然后创建代理对象Thread,调用start()方法。这里面的代理jdk帮我们写好了,不用自己写。

package com.staticProxy;public class ProgrammerApp {public static void main(String[] args) {//1.真实角色Programmer pro = new Programmer();//2.代理角色+真实角色的引用Thread t = new Thread(pro);//3.调用start() 启动线程t.start();for (int i = 0; i < 100; i++) {System.out.println("一边聊天。。。。");}}}class Programmer implements Runnable{@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("一边编写代码。。。。");}}}





原创粉丝点击