装饰者模式

废话一下

上一篇我们说到代理模式,通过 代理模式来实现对实际执行类的保护。如果实际执行类不能满足我们的需求怎么办呢?我需要做一些额外的处理。今天来看看装饰者模式是如何来实现的,同是我们来对比下代理模式和装饰者模式的区别

装饰者模式

1、定义:

动态地给一个对象添加一些额外的职责。就增加功能来说,装饰者模式相比生成子类更为灵活

怎么来理解它呢?举个例子吧,就上篇的代理模式来举例,我想在加载图片前后添加一些额外的处理,这些额外的处理不是ImageLoader的功能,而是我们自主添加的处理,从一定程度上增强或消弱了ImageLoader的功能。

我们来写下代码(咱们仍然沿用上一篇的例子,大家来对比一下区别)

2、步骤

a. 定义一个ImageLoader接口

public interface ImageLoader {
    void load(String url);
}

b. 用glide来实现图片加载

public class GlideImageLoader implements ImageLoader {
    @Override
    public void load(String url) {
        //这里实现具体的逻辑
        //Glide.with(context).into(imageView)
    }
}

c.定义一个ImageLoaderManager

public class ImageLoaderManager implements ImageLoader{
    private ImageLoader imageLoader;

    public ImageLoaderManager() {
        this.imageLoader=new GlideImageLoader();
    }
    @override
    public void loadImage(String url){
        //将图片加载转交给ImageLoader的实现类来操作
        beforeMethod(url);
        if (imageLoader!=null) {
            imageLoader.load(url);
        }
        afterMethod(url);
    }
    public void beforeMethod(String url){
        System.out.println("输出一下图片地址"+url)
    }
    public void afterMethod(){
        System.out.println("随意输出吧")
    }
}

d.测试类

public class Test {
    public static void main(String[] args){
        ImageLoaderManager imageLoaderManager=new ImageLoaderManager();
        imageLoaderManager.loadImage("url");
    }
}

e.与代理模式对比
- [ ] 1、ImageLoaderManager

//代理模式
public class ImageLoaderManager implements ImageLoader {
    private ImageLoader imageLoader;
    //代理模式中 ImagerLoader是在ImageLoaderManager中实例化的
    //即用户实际上并不需要知道,你用的是什么方式
    //当然你在调用处进行初始化也可以啊,不过就与代理模式的初衷违背了
    public ImageLoaderManager() {
        imageLoader=new GlideImageLoader();
    }
    @override
    public void load(String url){
        //将图片加载转交给ImageLoader的实现类来操作
        if (imageLoader!=null) {
            imageLoader.load(url);
        }
    }
}

- [ ] 3.差异分析

装饰者模式与代理模式对比:

1、多了两个方法,分别在图片加载前后,我们分别输出了两次日志(为了方便哈,勿怪)

2、其他都一致

关注点

静态代理的关注点是什么?是对于实际实现类的一种保护,
而装饰者模式的关注点是对原有类的增强或消弱

小结

装饰者的思想在于增强/消弱被装饰类的功能,那么我们是否可以直接将被装饰者的实现给替换呢?这又是什么模式呢?我将在下一篇来分享一下 适配器模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值