`
liulanghan110
  • 浏览: 1066633 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

代理模式

阅读更多

代理模式是对象的结构模式。代理模式给一个对象提供了一个代理对象,并由代理对象控制对象的引用。

              所谓代理,就是一个人或一个机构代表另一个人或机构采取行动。

代理模式在设计模式中的定义就是:为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。

 

 

 

使用代理的显著好处是,系统提供了向真实主题传递客户请求的控制。代理主题可以在向真实主题传递客户请求之前执行特定的操作,并决定是否将请求传递给真实主题;代理主题可以在向真实主题传递请求后执行另外的一些操作。

 

代理模式中的“代理商”要想实现代理任务,就必须和被代理的“厂商”使用共同的接口(你可以想象为产品)。所以自然而然你会想到在java中使用一个抽象类或者接口(推荐)来实现这个共同的接口。于是代理模式就有三个角色组成了:

  1.抽象主题角色:声明了真实主题和代理主题的共同接口。

  2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。

  3.真实主题角色:定义真实的对象。

 

 例子如下,有人要卖房子,可是他不清楚房子的价格,也不知道到哪找买家,于是他找了家房产中介(代理)来帮助他卖房。

Subject.java

package Proxy;

abstract public class Subject {   
	
    abstract public void SellHouse();   

}   

 卖房者RealSubject.java

package Proxy;

//卖房者卖房
public class RealSubject extends Subject {   
	  
    public void SellHouse() {   
        System.out.println("-------------卖房者卖房-------------");   
    }   
}   

 房产中介ProxySubject.java

 

package Proxy;

//房产中介
public class ProxySubject extends Subject {   
	  
    private RealSubject realSubject;   
  
    public void SellHouse() {   
           
        /*  
        if (realSubject == null) {  
            realSubject = new RealSubject();  
        }  
         realSubject.SellHouse();  
         */  
        System.out.println("-------------房产中介帮助房子定价-------------");   
        System.out.println("-------------房产中介帮助寻找客户-------------");   
        System.out.println("-------------房产中介帮助卖房-------------");   
           
    }   
       
}   

 测试代码Client.java

package Proxy;

public class Client {
	public static void main(String[] args) { 
		// 卖房者(Subject)卖房时找中介(Subject)   
        Subject subject = new ProxySubject();   
        subject.SellHouse();   
	}
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics