为其他对象提供一种代理以控制对这个对象的访问。
模式的结构中包括三种角色:
抽象主题(Subject) :定义一个接口,包含实际主题和代理都需要的方法
实际主题(RealSubject) :实现抽象主题
代理(Proxy) :实现抽象主题,但包含实际主题的引用
抽象主题(Subject): Geometry.java
public interface Geometry{
public double getArea();
}
具体模板(Concrete Template): Trangle.java
public class Triangle implements Geometry{
double sideA,sideB,sideC,area;
public Triangle(double a,double b,double c) {
sideA=a;
sideB=b;
sideC=c;
}
public double getArea(){
double p=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)) ;
return area;
}
}
代理(Proxy):TriangleProxy.java
public class TriangleProxy implements Geometry{
double sideA,sideB,sideC;
Triangle triangle;
public void setABC(double a,double b,double c) {
sideA=a;
sideB=b;
sideC=c;
}
public double getArea(){
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){
triangle=new Triangle(sideA,sideB,sideC);
double area=triangle.getArea();
return area;
}
else
return -1;
}