代理模式和装饰器模式

示例

public interface IChild {

    void eat();
}


public class Child implements IChild{

    @Override
    public void eat() {

        Log.e("TAG","孩子吃饭");
    }
}


创建父母(代理)类:

public class Parent implements IChild{

    private Child child;

    private Parent(Child child){

        this.child = child;
    }

    @Override
    public void eat() {

        Log.e("TAG","父母做饭");
        child.eat();
        Log.e("TAG","父母收拾餐具");
    }
}

创建孩子扩展(装饰)类:

public class ChildWrapper implements IChild{

    private Child child;

    public ChildWrapper(Child child){

        this.child = child;
    }

    @Override
    public void eat() {

        Log.e("TAG","孩子做饭");
        child.eat();
        Log.e("TAG","孩子收拾餐具");
    }
}

代理模式和装饰器模式都属于结构型设计模式,然而,他们的使用场景和目的有所不同。

  1. 代理模式:它为其他对象提供一个代理,从而实现对原对象的访问控制。代理模式的主要目的是控制访问,还可以用于懒加载,提供安全性等。代理模式由四个部分组成:抽象实体,真实实体,代理和客户端。一个具体的例子是网络代理,可以控制对网络资源的访问。

  2. 装饰器模式:这个模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式主要用于扩展一个对象的功能。装饰器模式的主要组件包括:抽象组件,具体组件,抽象装饰器和具体装饰器。一个常见的例子是Java I/O类库,它允许通过连接多种stream类型来装饰文件的读写操作。

总的来说,尽管代理模式和装饰器模式在结构上有些相似,但代理模式主要用于控制对对象的访问,而装饰器模式主要用于在运行时动态地向对象添加更多的职责。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值