设计模式之装饰器模式

22 篇文章 0 订阅
21 篇文章 2 订阅
装饰器模式提供了一种动态添加职责到对象的机制,避免了由于使用继承而导致的类膨胀问题。该模式包括抽象构件、具体构件、装饰和具体装饰四个角色。在Java中,通过实现相同接口来实现装饰,允许在不修改原有对象的情况下增加新功能。
摘要由CSDN通过智能技术生成

装饰器模式

装饰器(Decorator)模式又名包装(Wrapper)模式,是一种能动态将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰器模式也体现了开闭原则(ocp),是一种继承关系的替代方案。

装饰器模式的四个角色

  • 抽象构件(Component)角色:给出一个抽象接口,已规范准备接受附加责任对象。
  • 具体构件(ConcreteComponent)角色:定义一个将要接受附加责任的类。
  • 装饰(Decorator)角色:持有一个构件(Component)对象的实例,并定义一个与抽象构件接口一致的接口。
  • 具体装饰(ConcreteComponent)角色:负责给构件对象“贴上”附加的责任。

源代码

抽象构件:Component:

public interface Component {
    
    public void sampleOperation();
    
}

具体构建:ConcreteComponent

public class ConcreteComponent implements Component {

    @Override
    public void sampleOperation() {
        // 写相关的业务代码
    }

}

装饰器:Decorator

public class Decorator implements Component{
    private Component component;
    
    public Decorator(Component component){
        this.component = component;
    }

    @Override
    public void sampleOperation() {
        // 委派给构件
        component.sampleOperation();
    }
    
}

具体装饰器:ConcreteDecorator

public class ConcreteDecoratorA extends Decorator {

    public ConcreteDecoratorA(Component component) {
        super(component);
    }
    
    @Override
    public void sampleOperation() {     
      super.sampleOperation();
        // 写相关的业务代码
    }
}
public class ConcreteDecoratorB extends Decorator {

    public ConcreteDecoratorB(Component component) {
        super(component);
    }
    
    @Override
    public void sampleOperation() {      
      super.sampleOperation();
        // 写相关的业务代码
    }
}

Client:

public class Client {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        // 第一种写法
        Component concreteDecoratorA = new ConcreteDecoratorA(conponent);
        Component concreteDecoratorB = new ConcreteDecoratorB(concreteDecoratorA);
        // 第二种写法
        //Component concreteDecoratorB = new concreteDecoratorB(new concreteDecoratorA(component));
        concreteDecoratorB.sampleOperation(); 
    }

}

参考资料:

Java 设计模式-装饰器模式(Decorator)

《JAVA 与模式》之装饰模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值