代理设计模式的核心:一个接口有两个子类,一个负责真实的业务,一个负责与真实业务有关的辅助性操作
interface ISubject{
public void eat();
}
class realSubject implements ISubject{
@Override
public void eat() {
System.out.println("饿了要吃饭");
}
}
class proxySubject implements ISubject{
private ISubject subject;
public proxySubject(ISubject subject){
this.subject = subject;
}
public void prepare(){
System.out.println("整理食材");
}
public void after(){
System.out.println("洗碗");
}
@Override
public void eat() {
this.prepare();
this.subject.eat();
this.after();
}
}
class Factor1{
public static <T> T getInstance
(String real,String proxy) throws ClassNotFoundException {
T realObj = getInstance(real);
try {
Constructor<?> constructor = Class.forName(proxy).getConstructor
(realObj.getClass().getInterfaces()[0]);
return (T)constructor.newInstance(realObj);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
private static <T> T getInstance(String real) {
try {
return (T)Class.forName(real).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
public class ProxyTest {
public static void main(String[] args) throws ClassNotFoundException {
ISubject subject = Factor1.getInstance
("test.realSubject","test.proxySubject");
subject.eat();
}
}