[知了堂学习笔记]_设计模式之代理模式

代理模式也叫委托模式,是结构型设计模式的一种,为其他对象提供一种代理以控制对这个对象的访问。比如代购、代理上网、打官司等,就是在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。

代理模式的主要类型:
远程代理:为一个对象在不同的地址空间提供局部代表,这样系统可以将Server部分的事项隐藏。
虚拟代理:使用一个代理对象表示一个十分耗资源的对象并在真正需要时才创建。
安全代理:用来控制真实对象访问时的权限。
智能指引:当调用真实的对象时,代理处理另外一些事,比如计算真实对象的引用计数,当该对象没有引用时,可以自动释放它;或者访问一个实际对象时,检查是否已经能够锁定它,以确保其他对象不能改变它。

角色:
1.抽象主题角色:声明了真实主题和代理主题的共同接口。
2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。
3.真实主题角色:定义真实的对象。

package proxy;
/*
 * 代理模式
 */
public interface FixBug {

    public void giveSnack();
    public void giveRice();
    public void giveDrinks();

}
package proxy;
/*
 * 代理模式
 */
public class BugDou implements FixBug{

    Manager manager = null;

    public BugDou(Manager manager){
        this.manager = manager;
    }

    @Override
    public void giveSnack() {
        System.out.println(this.manager.getName()+"得到零食,可以解决Bug");
    }

    @Override
    public void giveRice() {
        System.out.println(this.manager.getName()+"得到午饭,可以解决Bug");
    }

    @Override
    public void giveDrinks() {
        System.out.println(this.manager.getName()+"得到饮料,可以解决Bug");
    }

}
package proxy;
/*
 * 代理模式
 */
public class Manager {

    private String name;

    public String getName() {
        return name;
    }

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

}
package proxy;
/*
 * 代理模式
 */
public class FeiFei implements FixBug{

    BugDou bugDou;

    public FeiFei(Manager manager){
        bugDou = new BugDou(manager);
    }

    @Override
    public void giveSnack() {
        bugDou.giveSnack();
    }

    @Override
    public void giveRice() {
        bugDou.giveRice();
    }

    @Override
    public void giveDrinks() {
        bugDou.giveDrinks();
    }

}
package proxy;
/*
 * 代理模式
 */
public class FixSuccess {

    public static void main(String[] args) {

        Manager manager1 = new Manager();
        manager1.setName("子墨");
        Manager manager2 = new Manager();
        manager2.setName("七哥");
        FeiFei feiFei1 = new FeiFei(manager1);
        FeiFei feiFei2 = new FeiFei(manager2);
        feiFei1.giveSnack();
        feiFei2.giveRice();
        feiFei1.giveDrinks();
    }

}

请关注“知了堂学习社区”,地址:http://www.zhiliaotang.com/portal.php

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值