模式5. 代理模式-Java

代理模式详解:实战模拟李大头与戴笠的礼物传递
本文通过实例讲解代理模式,阐述如何用Java实现,以李大头追求公主的故事中,戴笠作为代理角色来控制访问,展示了接口、被代理类、代理类和客户端的交互过程。

代理模式

1.定义:

为其他对象提供一种代理,以控制对这个对象的访问。

代理类和被代理类实现相同的功能,所以实现相同的接口。

在这里插入图片描述

2.以一个场景模拟代理类的应用

李大头喜欢公主,但是不好意思说出来,就让好友戴笠代替自己去给公主送礼物。这里李大头就是被被代理类,戴笠就是代理类。
在这里插入图片描述

(1)接口类

package com.proxy;
//总的接口
public interface GiveGift {
    public  void  giveDolls();
    public  void  giveFlowers();
    public  void  giveChocolate();
}

(2)真实被代理类

package com.proxy;
//真正的追求者
public class Pursiut implements GiveGift {

    Girl  girl;

    public Pursiut(Girl girl) {
        this.girl = girl;
    }
    @Override
    public void giveDolls() {
        System.out.println(girl.getName()+"送你洋娃娃");
    }

    @Override
    public void giveFlowers() {
        System.out.println(girl.getName()+"送你鲜花");
    }

    @Override
    public void giveChocolate() {
        System.out.println(girl.getName()+"送你巧克力");
    }
}

(3)代理类

package com.proxy;
  //代理类
public class Proxy implements  GiveGift{
    Pursiut pursiut;

    public Proxy(Girl girl) {
        this.pursiut=new Pursiut(girl);
    }

    @Override
    public void giveDolls() {
        pursiut.giveDolls();
    }

    @Override
    public void giveFlowers() {
            pursiut.giveFlowers();
    }

    @Override
    public void giveChocolate() {
            pursiut.giveChocolate();
    }
}

(3) 交互对象

package com.proxy;

public class Girl {
    String name;

    public Girl(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

(4)客户端类

package com.proxy;

public class Client {
    public static void main(String[] args) {
        Girl girl=new Girl("公主");  //公主,被追求者;
        Proxy proxy=new Proxy(girl);

        proxy.giveDolls();
        proxy.giveChocolate();
        proxy.giveFlowers();

    }
}

(5)运行测试

公主送你洋娃娃
公主送你巧克力
公主送你鲜花
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值