病怏怏地睡不着,还是继续码字吧!
代理模式,作用如其名,就是做代理的。就比如你开了一个格子铺,有好多格子,可以买不同的商品,客户要买什么不用直接找厂家,直接在你这就买得到,这个过程你就是这些商品的代理Proxy,代表厂家把商品卖给需要的顾客。这么一看,这不就是黄牛吗?是的,和黄牛差不多,但是绝对有他存在的必要。一个顾客一般不止需要一类商品,但是一个厂家一般都是产一类产品的,就比如生产文具的一般不会在一个厂里也生产化妆品,但是对顾客来说,我需要文具,我也需要化妆品,爱学习也爱化妆呀。那黄牛就有机会了,顾客要什么,给钱就行了,我帮你搞定厂家。黄牛代理不同厂家的商品,顾客直接找黄牛买就行了。
下面我们来看一下代码怎么实现:
厂家:
package com.freedom.proxy;
public interface Factory {
public void sell();
}
顾客:
package com.freedom.proxy;
public class Customer implements Factory {
@Override
public void sell() {
System.out.println("Customers go shopping,Factory sells. ");
}
}
黄牛代理:
package com.freedom.proxy;
public class Proxy implements Factory {
private Customer customer;
public Proxy(){
super();
this.customer = new Customer();
}
@Override
public void sell() {
Before();
customer.sell();
After();
}
private void Before(){
System.out.println("Before proxy");
}
private void After(){
System.out.println("After proxy");
}
}
test:
package com.freedom.proxy;
import org.junit.Test;
public class TestProxy {
@Test
public void test() {
Factory factory = new Proxy();
factory.sell();
}
}
/*
运行结果:
Before prox<pre name="code" class="java">Customers go shopping,Factory sells .
After proxy
*/
小结:如果已有的方法在使用的时候需要对原有的方法进行改进,此时有两种办法:
1、修改原有的方法来适应。这样违反了“对扩展开放,对修改关闭”的原则。
2、就是采用一个代理类调用原有的方法,且对产生的结果进行控制。这种方法就是代理模式。
使用代理模式,可以将功能划分的更加清晰,有助于后期维护!
源码下载:http://download.youkuaiyun.com/detail/github_22022001/8314195