美文网首页
学习笔记:设计模式之装饰模式

学习笔记:设计模式之装饰模式

作者: 大力papa | 来源:发表于2020-08-20 18:03 被阅读0次

本文仅供学习交流使用,侵权必删。
不作商业用途,转载请注明出处

WHAT 什么是装饰

装饰器就是通过分层对象来动态透明地为对象增强。能够让不修改实现类代码的情况下,添加新的逻辑代码。

装饰器UML.png

装饰器与代理模式的区别:

装饰器与代理看起来非常相似,但从语义上理解其实并不相同。装饰器的增强代码是与原业务逻辑相关的,例如在原来需求上添加新逻辑。代理的增强代码是与业务逻辑不相关的,例如日志记录,事务,鉴权等。

WHY 为什么使用装饰

装饰器优点

  1. 装饰器能够在不修改原代码的情况下对功能进行增强,符合开闭原则。
  2. 装饰器可以动态替换,提高扩展性和灵活性。
  3. 每个装饰器只专注于独立的增强方法,代码可读性高。

装饰器缺点

装饰器继承层级较深的情况下,会造成代码层级复杂,增加代码复杂性。

HOW 装饰的实现(JAVA)

场景

咖啡店有拿铁和美式咖啡,我们可以为咖啡添加双倍浓缩和加冰。而这里核心逻辑就是制作咖啡和美式,装饰就是双倍浓缩和加冰。

代码

  • 接口类
public interface ICoffee {

    void make();
}
  • 核心逻辑类
public class Latte implements ICoffee {

    @Override
    public void make() {
        System.out.println("Latte make");
        System.out.println("Latte finish");
    }
}


public class Americano implements ICoffee {

    @Override
    public void make() {
        System.out.println("Americano make");
        System.out.println("Americano finish");
    }
}
  • 装饰类
public abstract class AbstractCoffeeDecorator implements ICoffee {
    protected ICoffee coffee;

    public AbstractCoffeeDecorator(ICoffee coffee) {
        this.coffee = coffee;
    }

    @Override
    public void make() {
        if (coffee != null) {
            coffee.make();
        }
    }
}

/*
双倍浓缩
*/
public class DoubleShotDecorator extends AbstractCoffeeDecorator {
    public DoubleShotDecorator(ICoffee coffee) {
        super(coffee);
    }

    @Override
    public void make() {
        System.out.println("double shot");
        super.make();
    }
}



/*
加冰
*/
public class WithIceDecorator extends AbstractCoffeeDecorator {
    public WithIceDecorator(ICoffee coffee) {
        super(coffee);
    }

    @Override
    public void make() {
        super.make();
        System.out.println("with ice");
    }
}

  • Main方法
public class DecoratorMain {
    public static void main(String[] args) {

        LatteDoubleShot();
        AmericanoWithIce();
    }

    static void LatteDoubleShot() {
        ICoffee latte = new Latte();
        ICoffee doubleShotDecorator = new DoubleShotDecorator(latte);
        doubleShotDecorator.make();
    }


    static void AmericanoWithIce() {
        ICoffee americano = new Americano();
        ICoffee withIceDecorator = new WithIceDecorator(americano);
        withIceDecorator.make();
    }
}

持续更新...

相关文章

  • 设计模式整理(11) 装饰模式

    学习《Android 源码设计模式解析与实践》系列笔记 介绍 装饰模式,也称包装模式,结构型设计模式之一。 定义 ...

  • 学习笔记:设计模式之装饰模式

    本文仅供学习交流使用,侵权必删。不作商业用途,转载请注明出处 WHAT 什么是装饰 装饰器就是通过分层对象来动态透...

  • Decorator 装饰模式

    设计原则学习笔记 设计模式学习笔记 作用 动态的给一系列类添加新的属性以及操作。装饰模式和桥接模式有点像,桥接模...

  • JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计

    JavaScript 设计模式核⼼原理与应⽤实践 之 结构型设计模式 装饰器模式,又名装饰者模式。它的定义是“在不...

  • 设计模式学习笔记——装饰模式

    定义 装饰模式——动态地将责任附加到对象上。就增加功能来说,装饰模式相比生成子类更为灵活。 使用场景 需要透明且动...

  • 装饰对象:装饰者模式

    装饰对象:装饰者模式   这是《Head First设计模式(中文版)》第三章的读书笔记。   装饰者模式,可以称...

  • 装饰者模式——IO流运用

    推荐博客Java设计模式学习09Java设计模式学习09Java设计模式学习09 装饰者模式还是比较难懂的。。。。...

  • 32 Java设计模式系列-装饰者模式

    装饰者模式 装饰者模式是非常常见的设计模式之一,写个笔记,记录一下我的学习过程和心得。 首先了解一些装饰模者式的定...

  • 聊聊Context

    在上篇文章《设计模式之装饰模式》中我们谈到了装饰模式,在 Android 中关于 Context 的设计就用到了装...

  • 9、结构型模式-装饰器设计模式

    1、如虎添翼的设计模式-装饰器设计模式 简介:讲解-装饰器设计模式介绍和应用场景 装饰器设计模式(Decorato...

网友评论

      本文标题:学习笔记:设计模式之装饰模式

      本文链接:https://www.haomeiwen.com/subject/trddjktx.html