Java设计模式之结构型:代理模式

一、什么是代理模式:

代理模式的设计动机是通过代理对象来访问真实对象,通过建立一个对象代理类,由代理对象控制原对象的引用,从而实现对真实对象的操作。在代理模式中,代理对象主要起到一个中介的作用,用于协调与连接调用者(即客户端)和被调用者(即目标对象),在一定程度上降低了系统的耦合度,同时也保护了目标对象。但缺点是在调用者与被调用者之间增加了代理对象,可能会造成请求的处理速度变慢。

二、UML结构图:

在这里插入图片描述

  • Subject:抽象角色,声明了真实对象和代理对象的共同接口;
  • Proxy:代理角色,实现了与真实对象相同的接口,所以在任何时刻都能够代理真实对象,并且代理对象内部包含了真实对象的引用,所以它可以操作真实对象,同时也可以附加其他的操作,相当于对真实对象进行封装。
  • RealSubject:真实对象,是我们最终要引用的对象。

三、代码实现:

小时候你看到一个玩具,想让父母买,但是父母不会轻易给你买,这时候你就需要做点家务让父母开心才能拥有自己的小玩具。
首先就是父母类:

public class Parent {
    String name;

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

    public String getName() {
        return name;
    }

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

然后是抽象主题,做家务接口:

public interface Dohousework {
    /**
     * 做饭
     */
    void cook();

    /**
     * 打扫卫生
     */
    void cleaning();

    /**
     * 洗衣服
     */
    void doTheLaundry();

}

你小子:

public class You implements Dohousework{
    Parent parent ;     //父母

    public You(Parent parent){
        this.parent = parent;
    }


    @Override
    public void cook() {
        System.out.println(parent.getName() +",我去做饭....");
    }

    @Override
    public void cleaning() {
        System.out.println(parent.getName() + ",我去打扫卫生....");
    }

    @Override
    public void doTheLaundry() {
        System.out.println(parent.getName() + ",我去洗衣服....");
    }
}

妈妈:

public class Mom implements Dohousework{
    You you;

    public Mom(Parent parent){
        you = new You(parent);
    }
    @Override
    public void cook() {
        you.cook();
    }

    @Override
    public void cleaning() {
        you.cleaning();
    }

    @Override
    public void doTheLaundry() {
        you.doTheLaundry();
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        Parent parent = new Parent("妈妈");

        Mom mom = new Mom(parent);

        mom.cook();
        mom.cleaning();
        mom.doTheLaundry();
    }
}

结果:
在这里插入图片描述

四、代理模式与装饰器模式的区别:

代理模式跟装饰器模式比较类似,有些读者可能容易将他们混淆,这里我们简单介绍下两者的区别:

  • (1)装饰器模式关注于在对象上动态添加新行为,而代理模式虽然也可以增加新的行为,但关注于控制对象的访问。

  • (2)装饰器模式执行主体是原类;代理模式是代理原类进行操作,执行主体是代理类。

  • (3)代理模式中,代理类可以对客户端隐藏真实对象的具体信息,因此使用代理模式时,我们常常在代理类中创建真实对象的实例。而装饰器模式的通常做法是将原始对象作为参数传给装饰者的构造器。也就是说。代理模式的代理和真实对象之间的对象通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值