本文共 1953 字,大约阅读时间需要 6 分钟。
new WeddingCompany对象时会自动调用构造器,new对象时将接口实现类Me类型的变量作为参数传入该构造方法,该构造方法又将该对象赋值给自身内部的Marry接口类型变量target,使得target变成Me类型的变量,因此可以调用Me类内部重写的HappyMarry方法,输出真实对象Me中的内容,又可以在代理公司自身的HappyMarry方法中添加附加的代码,添加额外的操作 原来我们直接new出Me类自己的对象,调用Me类自己的HappyMarry方法,达到某些代码功能,现在我们通过一个接口2个实现类来静态代理不仅仅可以实现原有代码,还可以增加一些额外的代码来实现其他的功能具体的代码以及注解如下:细节很多,仔细看注释
package duoxiancheng;//静态代理模式总结://真实对象和代理对象都要实现同一个接口//代理对象要代理真实角色//静态代理的好处:代理对象可以做很多真实对象做不了的事情,真实对象可以专注做自己的事情public class StaticProxy { public static void main(String[] args) { WeddingCompany weddingCompany = new WeddingCompany(new Me()); weddingCompany.HappyMarry(); //此处执行的是婚庆公司类创建对象中重写的HappyMarry方法,但是HappyMarry方法中 }}interface Marry{ //这是一个结婚接口 void HappyMarry(); //结婚接口中有自己的一个方法,所有实现这个接口的类都要重写这个方法}//真实角色,我去结婚class Me implements Marry{ @Override public void HappyMarry() { System.out.println("我要结婚了"); }}//代理角色帮我结婚class WeddingCompany implements Marry{ //在结婚公司这个类中定义接口类型的变量target,接收一会传入的真实对象Me private Marry target; //构造方法将传入的接口继承实现类Me类型的变量赋值给上一行本类中自己定义的私有接口类型的变量target public WeddingCompany(Marry target) { //类中的构造方法,对类中的一些属性进行赋值,这里的参数是Marry接口,但传入的可以是实现接口的类名 this.target = target; } @Override //alt+insert重写方法 public void HappyMarry() { before(); //重写的HappyMarry方法中再实现一些自己附加的东西 this.target.HappyMarry();//this。target是本类中自己定义的接口类型的变量,通过上面的构造方法将接口Marry的实现类传给了本类中的接口类型变量target // 接口的实现类对象传入了本类中,就可以调用其下的方法了,此处调用的是新建Me类中的自己的HappyMarry方法 after(); //重写的HappyMarry方法中再实现一些自己附加的东西 } private void before() { System.out.println("收份子钱!"); } private void after() { System.out.println("洞房花烛!"); }}
Thread类也实现了Runnable接口,WeddingCompany类和Me类实现了Marry接口类
WeddingCompany传入Me类参数,调用的是自身的HappyMarry方法,该方法中包括传入参数Me类中的HappyMarry方法和附加的一些代码,该方法中又调用了传入参数Me类型对象中的HappyMarry方法,达到代理输出并且附加实现其他功能。HappyMarry方法相当于线程中的start方法转载地址:http://ewnwi.baihongyu.com/