代码改变世界

代理模式

2017-08-02 21:18  grows  阅读(240)  评论(0编辑  收藏  举报

1.     代理在现实生活中比较常见,例如:我们喝的可乐,是在超市里面或者小卖部里面买的,我们吃的食物,例如:方便面也是在超市或者小卖部里面买的,这些超市或者是小卖部其实并不是可乐方便面的生产者,而是去厂商那里拿货自己去卖其实就是一个代理商

2.     代理模式具有的角色以及行为:

1) 真实的生产商

2) 代替真实生产商的代理商

3) 生产商能够产生的行为的抽象(以为代理商其实就是代理生产商做事,所以应该具备代理商的行为)

3.     代码实现

行为抽象:

package proxymodel;
/**
 * 卖使用的接口厂商和代理商都需要有,
 * 
 * @author Administrator
 *
 */
public interface SellFoodA {
    public void sellfood(Consumers cunsumers);
}

 

生产商:

package proxymodel;
/**
 * 厂商
 * @author Administrator
 *
 */
public class Manufactures implements SellFoodA {

    @Override
    public void sellfood(Consumers cunsumers) {
        // TODO Auto-generated method stub
        System.out.println("卖食物给:"+ cunsumers.getName());

    }

}

 

代理商:

package proxymodel;

/**
 * 代理商
 * @author Administrator
 *
 */
public class Proxy implements SellFoodA {

    private Manufactures manufactrue=new Manufactures();
    @Override
    public void sellfood(Consumers cunsumers) {
        // TODO Auto-generated method stub
        manufactrue.sellfood(cunsumers);
    }
}

 

顾客:

package proxymodel;

/**
 * 顾客类
 * @author Administrator
 *
 */
public class Consumers {
    String name;
    Consumers(String name){
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    

}

 

测试:

package proxymodel;

public class testProxy {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //顾客
        Consumers consumersA=new Consumers("张三");
        Consumers consumersB=new Consumers("李四");
        Consumers consumersC=new Consumers("王五");
        //代理商
        Proxy proxy=new Proxy();
        //在代理商这里去买食物
        proxy.sellfood(consumersA);
        proxy.sellfood(consumersB);
        proxy.sellfood(consumersC);
    }

}
卖食物给:张三
卖食物给:李四
卖食物给:王五

 

4.     使用场景

1) 加载资源比较慢,但是有需要频繁使用的

2) 做某种行为需要先进行验证等

例如:连接池就是一个代理,在连接池里面有很多连接后台数据的连接对象,通过连接池可以做操作数据库的某种动作