什么是代理模式
代理模式:
为其他对象提供一种代理以控制对这个对象的访问(在下面例子里,为小红提供代理,小明对小红进行访问)
看看图,看完图看不懂的话,我们设计这样一个需求,肯定就能看懂了,需求和代码如下
通过你用装饰模式写的代码,老板开开心心的去约会了,约了才发现,人家有男朋友,而且还给你老板讲了这么一个故事:
小红(女主)上学的时候,小白给小红递了一封情书和礼物,这封情书,礼物是小明让小白送给小红的,老板说到这的时候,很难受,就没往下说,
希望你可以通过代码将这个过程写出来,老板要记住这个伤心的事
于是,你分析了这个需求,显然,小明通过小白给小红送礼物,用到了代理模式
/**
* 一。首先既然是 送东西,得有一个仓库把(接口)
* */
interface GiveFift {
void giveDolls();
void giveFlowers();
void giveChocolate();
}
/**
* 二。 被追求者:小红
* */
public class SchoolGirl {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 三。谁想送呢 小明把,把小明写出来
* 1,小明給 mm禮物,肯定得配置mm的信息吧,总得知道给谁送吧
* */
public class Pursuit implements GiveFift{
/**
* 小明給 mm禮物
* */
SchoolGirl mm;
public Pursuit(SchoolGirl mm) {
this.mm=mm;
}
public SchoolGirl getMm() {
return mm;
}
public void setMm(SchoolGirl mm) {
this.mm = mm;
}
@Override
public void giveDolls() {
// TODO Auto-generated method stub
System.out.println(mm.getName()+"給你洋娃娃");
}
@Override
public void giveFlowers() {
// TODO Auto-generated method stub
System.out.println(mm.getName()+"給你花");
}
@Override
public void giveChocolate() {
// TODO Auto-generated method stub
System.out.println(mm.getName()+"給你巧克力");
}
}
/**
* 四。显然,小明不是自己直接给小红礼物的,这里有一个代理,因为小明除了小白,也可以通过其他人送礼物。 1.既然是代理,就跟媒婆一样,男女两边都得认识吧,所以
* 送的人,被送的人,代理(媒婆)都得配置吧 1.这是核心部分
*/
public class Proxy implements GiveFift {
/**
* 送的人
*/
Pursuit pursuit;
/**
* 通过构造方法,调用小明,从小那里拿礼物送给小红
*/
public Proxy(SchoolGirl mm) {
pursuit = new Pursuit(mm);
}
/**
* 代理是知道要送礼物的,但具体的礼物,还是得从 小明那里拿
*/
@Override
public void giveDolls() {
pursuit.giveDolls();
}
@Override
public void giveFlowers() {
pursuit.giveFlowers();
}
@Override
public void giveChocolate() {
pursuit.giveChocolate();
}
}
/**代理模式
* 了解代理模式之前,我们先看看这样一个需求:
* 通过你用装饰模式写的代码,老板开开心心的去约会了,约了才发现,人家有男朋友,而且还给你老板讲了这么一个故事:
* 小红(女主)上学的时候,小白给小红递了一封情书和礼物,这封情书,礼物是小明让小白送给小红的,老板说到这的时候,很难受,就没往下说,
* 希望你可以通过代码将这个过程写出来,老板要记住这个伤心的事
* 于是,你分析了这个需求,显然,小明通过小白给小红送礼物,用到了代理模式
* 来来来,你的代码这次一下就出来了
* 看一看代码:
* 1.通过代理模式,小红就算不认识小明,小明也可以通过小白(代理模式)给小红送礼物,从而让小红受到礼物,这就是代理模式
* 客户端
* */
public class Test1 {
public static void main(String[] args) {
SchoolGirl sgGirl=new SchoolGirl();
sgGirl.setName("小红");
// 通过代理模式给小红送礼物
Proxy daili=new Proxy(sgGirl);
daili.giveChocolate();
daili.giveDolls();
daili.giveFlowers();
}
}
看完代碼,應該對設計模式有所瞭解了,那麽設計模式的應用場景都有哪些呢
代理模式的应用场景:
1。远程代理:也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一哥对象存在于不同地址空间的事实。
2。虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。(浏览器代理)
3。安全代理: 用来控制真实对象访问时的权限:一般用于对象应该有不同的访问权限的时候。
4。智能指引:是指调用真实的对象时,代理处理另外一些事。
这4种应用场景 以后有例子写出来!!!!!!!!!!!!!!