普通对象所需要完成的任务就是通过公共接口为外界提供自己所承诺的服务(也就是让别的类调用它的方法),然而,有时候,一个合法的对象会因为某种原因而无法完成自己的常规任务。这个时候就需要一个代理对象来替它完成任务。由此可见代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
[b]代理有两种方式:静态代理和动态代理[/b]
[b]静态代理[/b]:在静态代理中代理对象与被代理对象都必须实现同一接口,在代理对象中可以实现日志这样的操作,在需要使用该操作的时候呼叫被代理对象,如此代理对象当中就可以仅保留业务相关职责。
[b]公共接口:IBuySome.java[/b]
[code] package org.kangsg219.staticProxy;
public interface IBuySome {
public void buy();
}
[/code]
[b]
被代理对象:BuySomeImpl.java [/b]
[code]package org.kangsg219.staticProxy;
public class BuySomeImpl implements IBuySome {
public void buy() {
System.out.println("买个手机。(BuySomeImpl类中的buy方法。)");
}
}[/code]
[b] 代理对象:BuySomeProxy.java[/b]
[code]package org.kangsg219.staticProxy;
public class BuySomeProxy implements IBuySome{
BuySomeImpl bsi=new BuySomeImpl();
public void buy() {
this.beforBuy();
bsi.buy();
this.afterBuy();
}
public void beforBuy(){
System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
}
public void afterBuy(){
System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
}
}
[/code]
[b]测试类:TestMain.java[/b]
[code]package org.kangsg219.staticProxy;
/**
* @author kangsg219
*
* 测试类
*/
public class TestMain {
public static void main(String[] args) {
IBuySome ibs=new BuySomeProxy();
ibs.buy();
}
}
[/code]
运行结果:
在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)
买个手机。(BuySomeImpl类中的buy方法。)
在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)
待续。。。
[b]代理有两种方式:静态代理和动态代理[/b]
[b]静态代理[/b]:在静态代理中代理对象与被代理对象都必须实现同一接口,在代理对象中可以实现日志这样的操作,在需要使用该操作的时候呼叫被代理对象,如此代理对象当中就可以仅保留业务相关职责。
[b]公共接口:IBuySome.java[/b]
[code] package org.kangsg219.staticProxy;
public interface IBuySome {
public void buy();
}
[/code]
[b]
被代理对象:BuySomeImpl.java [/b]
[code]package org.kangsg219.staticProxy;
public class BuySomeImpl implements IBuySome {
public void buy() {
System.out.println("买个手机。(BuySomeImpl类中的buy方法。)");
}
}[/code]
[b] 代理对象:BuySomeProxy.java[/b]
[code]package org.kangsg219.staticProxy;
public class BuySomeProxy implements IBuySome{
BuySomeImpl bsi=new BuySomeImpl();
public void buy() {
this.beforBuy();
bsi.buy();
this.afterBuy();
}
public void beforBuy(){
System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
}
public void afterBuy(){
System.out.println("在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)");
}
}
[/code]
[b]测试类:TestMain.java[/b]
[code]package org.kangsg219.staticProxy;
/**
* @author kangsg219
*
* 测试类
*/
public class TestMain {
public static void main(String[] args) {
IBuySome ibs=new BuySomeProxy();
ibs.buy();
}
}
[/code]
运行结果:
在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)
买个手机。(BuySomeImpl类中的buy方法。)
在买东西前执行的一些动作。(BuySomeProxy类中附加的方法。)
待续。。。