五、装饰模式

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

一、模式类图

侧重给一个类添加一些额外的功能,是对现有功能的修补措施,并不是开发设计阶段考虑的设计方式。

二、业务应用实例

package com.hongyan.decorator;

/**
 * 装饰模式
 *
 * @author hy
 * @date 2022/01/24
 */
public class Decorator {

    /**
     * 抽象产品类
     *
     * @author hy
     * @date 2022/01/24
     */
    static abstract class Product{
        public abstract void useMethods();
    }

    /**
     * 具体产品
     *
     * @author hy
     * @date 2022/01/24
     */
    static class ConProduct extends Product{

        @Override
        public void useMethods() {
            System.out.println("最早期的产品使用方法");
        }
    }

    // 此时发现产品有缺陷,需要增加一些额外的步骤才能正常使用,此时装饰器来了

    static abstract class MyDecorator extends Product{
        private Product product =null;
        public MyDecorator(Product product) {
            this.product = product;
        }

        @Override
        public void useMethods() {
            this.product.useMethods();
        }
    }

    static class ConMyDecorator extends MyDecorator {

        public ConMyDecorator(Product product) {
            super(product);
        }

        private void beforeUse(){
            System.out.println("使用前需要。。。");
        }

        private void afterUse(){
            System.out.println("使用后需要。。。");
        }

        @Override
        public void useMethods() {
            beforeUse();
            super.useMethods();
            afterUse();
        }
    }

    public static void main(String[] args) {
        Decorator.Product product = new Decorator.ConProduct();
        product = new ConMyDecorator(product);
        product.useMethods();
    }

}

结果如下:

使用前需要。。。
最早期的产品使用方法
使用后需要。。。

三、框架应用实例

FilterInputStream包含一些其他的输入流,它使用这些输入流作为它的基本数据源,可能在过程中转换数据或提供额外的功能。FilterInputStream类本身简单地用传递所有请求到所包含的输入流的版本覆盖了InputStream的所有方法。FilterInputStream的子类可以进一步覆盖其中的一些方法,还可以提供额外的方法和字段。

总结:装饰模式侧重额外增加功能,而代理模式是让其他对象进行控制。模式需要多领悟,不断实践才能掌握其中的真谛。模式不是一种约束,而只是一种设计模式,在此之上我们也可以进行优化升级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HuntFalcon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值