过程:
接口Interface(doSomething,somethingElse方法)
RealObject继承Interface
SimpleProxy继承Interface
类SimpleProxyDemo(consumer,main方法)
个人实现:
package thinking;
interface Interface{
void doSomething();
void somethingElse(String arg);
}
class RealObject implements Interface{
@Override
public void doSomething() {
System.out.println("RealClass doSomething");
}
@Override
public void somethingElse(String arg) {
System.out.println("RealClass somethingElse "+ arg);
}
}
class SimpleProxy implements Interface{
private Interface proxyedObj;
public SimpleProxy(Interface proxyedObj) {
this.proxyedObj = proxyedObj;
}
@Override
public void doSomething() {
System.out.println("SimpleProxy doSomething");
proxyedObj.doSomething();
}
@Override
public void somethingElse(String arg) {
System.out.println("SimpleProxy somethingElse "+ arg);
proxyedObj.somethingElse("Proxy");
}
}
public class SimpleProxyDemo {
public static void main(String[] args) {
Interface realobj = new RealObject();
realobj.doSomething();
realobj.somethingElse("real");
Interface proxy = new SimpleProxy(realobj);
proxy.doSomething();
proxy.somethingElse("proxy");
}
}
原书实现:
package thinkingjava;
interface Interface{
void doSomething();
void somethingElse(String arg);
}
class RealObject implements Interface{
@Override
public void doSomething() {
System.out.println("RealClass doSomething");
}
@Override
public void somethingElse(String arg) {
System.out.println("RealClass somethingElse "+ arg);
}
}
class SimpleProxy implements Interface{
private Interface proxyedObj;
public SimpleProxy(Interface proxyedObj) {
this.proxyedObj = proxyedObj;
}
@Override
public void doSomething() {
System.out.println("SimpleProxy doSomething");
proxyedObj.doSomething();
}
@Override
public void somethingElse(String arg) {
System.out.println("SimpleProxy somethingElse "+ arg);
proxyedObj.somethingElse("Proxy");
}
}
public class SimpleProxyDemo {
public static void consumer(Interface iface){
iface.doSomething();
iface.somethingElse("bonobo");
}
public static void main(String[] args) {
consumer(new RealObject());
consumer(new SimpleProxy(new RealObject()));
}
}
比较:
main方法中直接调用,而不是写到main中