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

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

文章目录

前言

装饰器模式顾名思义,就是装饰,如出门需要化妆进行装饰一下,在一些正式的场合需要西装革履进行装饰。装饰器的意图是动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。本篇我们以装饰person举例进行说明装饰器模式。

一、装饰器

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

使用的场景:1、扩展一个类的功能。 2、动态增加功能,动态撤销。

二、装饰器模式实现

比如,出门正常刷牙,洗头,换衣出门,但是今天太阳大,我们带哥墨镜,打个领带


e687d9c721b94f669ef39e2f316f2e5e.png

1.接口类

/**

* 正常外出需要

*/

public interface PersonOuter {

  void decorate();

}

2.实现类

/**

* 男孩出门

*/

public class BoyOuter implements PersonOuter{

   public void brushTeeth() {

       System.out.println("男孩出门刷牙");

   }

   public void washair() {

       System.out.println("男孩出门洗头");

   }

   public void changeClothes() {

       System.out.println("男孩出门换衣");

   }

   @Override

   public void decorate() {

       brushTeeth();

       washair();

       changeClothes();

   }

}

3.抽象装饰类

/**

*

*/

public abstract class PersonDecorator implements PersonOuter {

   //外出传入进行装饰

   private PersonOuter personOuter;

   //构造器

   public PersonDecorator(PersonOuter personOuter) {

       this.personOuter = personOuter;

   }

   @Override

   public void decorate() {

       personOuter.decorate();

   }

}

4.额外装饰

男孩出门需要墨镜

/**

* 墨镜装饰器

*/

public class SunGlassDecorator extends PersonDecorator {

   public SunGlassDecorator(PersonOuter personOuter) {

       super(personOuter);

   }

   @Override

   public void decorate() {

       sunGlass();

   }

   public void sunGlass(){

       System.out.println("出门带墨镜");

   }

}

领带:

/**

* 领带装饰器

*/

public class TieDecorator extends PersonDecorator{

   public TieDecorator(PersonOuter personOuter) {

       super(personOuter);

   }

   @Override

   public void decorate() {

       tie();

   }

   public void tie(){

       System.out.println("出门系领带");

   }

}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了装饰器使用,注意使用的场景, 使用的场景:1、扩展一个类的功能。 2、动态增加功能,动态撤销。

相关文章
|
2月前
|
设计模式 XML Java
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
【设计模式】装饰器模式(定义 | 特点 | Demo入门讲解)
41 0
|
11天前
|
设计模式 前端开发 JavaScript
前端必须掌握的设计模式——装饰器模式
装饰器模式是一种结构型设计模式,通过创建新类来包装原始对象,实现在不修改原有结构的前提下扩展新行为。其核心在于“组合”思想,使新功能可“即插即拔”。该模式具有解耦性、灵活性和动态性等特点,广泛应用于类的面向对象编程语言中,如JavaScript的注解和TypeScript的写法。示例中,通过装饰器模式为游戏角色动态添加装备,展示了其强大的扩展性和灵活性。
|
24天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
1月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
38 4
|
2月前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
54 0
[Java]23种设计模式
|
1月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
2月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
设计模式 Java
Java设计模式
Java设计模式
34 0
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。