代理模式
为其他对象提供一种代理以控制对这个对象的访问。
一 、 概述
代理模式是为对象提供一个代理,代理可以控制对它所代理的对象的访问。
代理模式最常见的两种情况:远程代理和虚拟代理。
二、代理模式的结构与使用
模式的结构中包括三种角色:
1.抽象主题(Subject): Geometry.java
public interface Geometry{
public double getArea();
}
2.具体模板(Concrete Template): Trangle.java
public class Triangle implements Geometry{
double sideA,sideB,sideC,area;
public Triangle(double a,doubleb,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)) ;
returnarea;
}
}
3.代理(Proxy):TriangleProxy.java
public class TriangleProxy implementsGeometry{
double sideA,sideB,sideC;
Triangle triangle;
public void setABC(double a,doubleb,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;
}
}
4.应用 Application.java
import java.util.Scanner;
public class Application{
public static void main(String args[]) {
Scanner reader=new Scanner(System.in);
System.out.println("请输入三个数,每输入一个数回车确认");
double a=-1,b=-1,c=-1;
a=reader.nextDouble();
b=reader.nextDouble();
c=reader.nextDouble();
TriangleProxy proxy=new TriangleProxy();
proxy.setABC(a,b,c);
double area=proxy.getArea();
System.out.println("面积是:"+area);
}
}
三、代理模式的优点