Java设计模式系列-装饰器模式

一、概述

装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能。装饰者类需要实现抽象接口并引入抽象接口的实例。

二、初步分析

上面提到了两点:

  • 涉及的是单方
  • 目标是抽象的

解决单方提供对外服务的问题,单方在自行对外提供服务时,功能不足,我们需要额外添加一些新功能,这时就可以使用装饰器模式,来对这个单方进行增强。

目标抽象的意思是因为我们需要通过实现接口的方式来进行增强,因此目标必须抽象为接口。

三、实例

下面我们用我们生活中的一个例子来说明,我们用房子来作为目标:

房子接口:House

/**
 * 目标接口:房子
 */
public interface House {
    void output();
}

具体的房子:董浩的房子

/**
 * 房子实现类
 */
public class DonghaoHouse implements House {
    @Override
    public void output() {
        System.out.println("这是董浩的房子");
    }
}

具体的房子:董量的房子

/**
 * 房子实现类
 */
public class DongliangHouse implements House {
    @Override
    public void output() {
        System.out.println("这是董量的房子");
    }
}

装饰器:Decorator

public class Decorator implements House {
    private House house;
    public Decorator(House house){
        this.house = house;
    }
    @Override
    public void output() {
        System.out.println("这是针对房子的前段装饰增强");
        house.output();
        System.out.println("这是针对房子的后段装饰增强");
    }
}

测试类:

public class Clienter {
    public static void main(String[] args) {
        House donghaoHouse = new DonghaoHouse();
        House decorator = new Decorator(donghaoHouse);
        decorator.output();
    }
}

执行结果为:

这是针对房子的前段装饰增强
这是董浩的房子
这是针对房子的后段装饰增强

四、解析

只有目标是抽象的,才可以使用装饰器模式来进行增强。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值