您的位置:首页

代理模式Proxy

2016-11-02 09:45 120 查看
需求:

小明帮小张送礼物给娇娇。

代码编写:

package com.t_11;

import org.junit.Test;

/**
*  代理模式
* @author Administrator
*    故事情节:
*    小张请小明帮忙追小娇
*/
public class t1 {
@Test
public void fun(){
XiaoZhang xiaozhang=new XiaoZhang();
xiaozhang.giveFlower();
xiaozhang.giveMilk();
xiaozhang.getChocolate();
}
@Test
public void fun2(){
XiaoMing xiaozhang=new XiaoMing();
xiaozhang.giveFlower();
xiaozhang.giveMilk();
xiaozhang.getChocolate();
}
@Test
public void fun3(){
XiaoMing1 xiaoming=new XiaoMing1("娇娇");
xiaoming.getChocolate();
xiaoming.giveFlower();
xiaoming.giveMilk();
}
}
class XiaoZhang{
public void giveFlower(){
System.out.println("小娇,花");
}
public void getChocolate(){
System.out.println("小娇,巧克力");
}
public void giveMilk(){
System.out.println("小娇,牛奶");
}
}
/*前面那是小张直接追求的小娇,也就没有代理这一说法,实际上,小张与小娇是不认识的*/
class XiaoMing{
public void giveFlower(){
System.out.println("小娇,花");
}
public void getChocolate(){
System.out.println("小娇,巧克力");
}
public void giveMilk(){
System.out.println("小娇,牛奶");
}
}
/*第二次忽视了小张的存在,也不应该是这样的,应该是小明帮小张送花,本质是小张的行为,而且,小张应该不认识小娇,所以不能直接给名字。*/
abstract class Gift{
public abstract void giveFlower();
public abstract void getChocolate();
public abstract void giveMilk();
}
class XiaoZhang1 extends Gift{
private String name;
public XiaoZhang1(String name){this.name=name;}
@Override
public void giveFlower() {
System.out.println(name+",花");
}

@Override
public void getChocolate() {
System.out.println(name+",巧克力");
}

@Override
public void giveMilk() {
System.out.println(name+",牛奶");
}

}
class XiaoMing1 extends Gift{
private XiaoZhang1 xiaozhang1;
public XiaoMing1(String girlName){
xiaozhang1=new XiaoZhang1(girlName);
}
@Override
public void giveFlower() {
xiaozhang1.giveFlower();
}

@Override
public void getChocolate() {
xiaozhang1.getChocolate();
}

@Override
public void giveMilk() {
xiaozhang1.giveMilk();
}

}
/*
* 第三次使用的是代理模式,代理对象内部构成了一个原对象,然后使用原对象的方法完成指定操作。与装饰者模式类似,不同的是传入的只是构造原对象的重要组件,而不是原对象,而且不存在增强。
* */


代理模式图解:



实际操作:

让代理类和实际操作类实现同一个接口。代理类中包含一个实际类对象,在创建代理类对象的时候隐式创建实际类对象,然后调用代理类的方法本质上都是调用是实际类对象的对应方法。

与装饰者模式类似。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: