Java设计模式之装饰器模式

        装饰器模式可以字面理解,就是用来对某个功能进行装饰的,装饰就是在原来的基础上进行增加,生活中也有很多案例,帮助我们理解装饰器模式,例如挂相片这件事,我们打印好后相片,直接贴在墙上也可以,基础功能就满足需求了,但是如果给相片加上一个相框,就会看起来更加美观,看起来心情都更好了,这里面就有两个角色,相片是基础功能,相框是装饰角色。 装饰器模式有几个角色是必不可少的,分别有四个,如下

  • 功能抽象角色,定义功能方法
  • 具体功能实现角色,将抽象方法实现具体的业务逻辑
  • 抽象装饰角色,继承/实现功能抽象角色定义的功能,但是不做装饰扩展
  • 具体装饰角色,实现抽象装饰角色,实现具体的装饰逻辑

通过案例来说明,源码如下

功能抽象角色

public abstract class Component {

    public abstract void method();
}

具体功能实现角色

public class ConcreteComponent extends Component {

    @Override
    public void method() {
        System.out.println("我是基础功能。。。");
    }
}

抽象装饰角色

public abstract class Decorator extends Component {

    Component component;

    protected Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void method() {
        component.method();
    }
}

具体装饰角色

public class ConcreteDecorator extends Decorator {

    public ConcreteDecorator(Component component) {
        super(component);
    }

    @Override
    public void method() {
        //装饰功能
        System.out.println("原逻辑调用前的装饰逻辑。。。");
        //原始的方法逻辑
        super.method();
        //装饰功能
        System.out.println("原逻辑调用后的装饰逻辑。。。");
    }
}

所有的代码已经写完,我们测试一下,测试代码如下

public class Main {

    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        component.method();
        System.out.println("=============分割线=============");
        Component decorator = new ConcreteDecorator(component);
        decorator.method();
    }
}

执行main方法后,可以得到原有功能不变的情况下,对原有的功能进行了装饰,效果如下

到这里,装饰器模式就总结结束了。其实学习设计模式,在写代码的过程中,应该写尽量简单的代码来体现设计模式,学习设计模式,更多的是学习他的思想,然后运用到我们的实际开发中,让我们写出更优雅、高效的代码。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值