7、代理模式
代理,顾名思义!
日常生活中的代理商等,都是对代理的诠释!
为其它对象提供一种代理以控制对这个对象的访问.
1,远程代理--也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实.
2,虚拟代理--是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象.
3,安全代理--用来控制真实对象访问时的权限,一般用于对象应该有不同的访问权限的时候.
4,智能指引--是指当调用真实对象时,代理处理另外一些事.
现在一个例子来分析!!
漂亮女孩实体
public class BeautifulGirl {private String name;private char sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}}
public interface GiveGift {//送洋娃娃void GiveDolls();//送花void GiveFlowers();//送巧克力void GiveChocolate();}
public class Jason implements GiveGift {private BeautifulGirl girl;public Jason(){}public Jason(BeautifulGirl bgirl){this.girl = bgirl;}@Overridepublic void GiveChocolate() {System.out.println("Jason送巧克力给"+this.girl.getName());}@Overridepublic void GiveDolls() {System.out.println("Jason送洋娃娃给"+this.girl.getName());}@Overridepublic void GiveFlowers() {System.out.println("Jason送花给"+this.girl.getName());}}
public class Jack implements GiveGift {public Jason jason;public Jack(){}public Jack(BeautifulGirl girl){this.jason = new Jason(girl);}@Overridepublic void GiveChocolate() {System.out.println("Jack-GiveChocolate()进入");jason.GiveChocolate();}@Overridepublic void GiveDolls() {System.out.println("Jack-GiveDolls()进入");jason.GiveDolls();}@Overridepublic void GiveFlowers() {System.out.println("Jack-GiveFlowers()进入");jason.GiveFlowers();}public void GiveCoffee(){System.out.println("Jack主动送咖啡");}}
public class Test {public static void main(String[] args) {BeautifulGirl girl = new BeautifulGirl();girl.setName("Tina");Jack man = new Jack(girl);man.GiveCoffee();man.GiveChocolate();man.GiveDolls();man.GiveFlowers();}}