23种设计模式_MODE08装饰者模式_手写代码实现

简介: 23种设计模式_MODE08装饰者模式_手写代码实现

1.装饰者模式测试

package com.zhaoshuangjian.mode08_装饰者模式;
import com.zhaoshuangjian.mode08_装饰者模式.mode08.FolderA;
import com.zhaoshuangjian.mode08_装饰者模式.mode08.FolderB;
import com.zhaoshuangjian.mode08_装饰者模式.mode08.FolderDecorator;
/**
 * <p>装饰者模式测试</p>
 *
 * @Author zhaoshuangjian  2023-03-25 上午10:39
 */
public class DecoratorTest {
  public static void main(String[] args){
    /**
     * 扩展在Windows系统中的文件创建和删除功能
     */
    FolderA folderA = new FolderA();
    FolderDecorator folderDecoratorA = new FolderDecorator(folderA);
    folderDecoratorA.mkDir();
    folderDecoratorA.rmdir();
    System.out.println("============= 分割线");
    /**
     * 扩展在Linux系统中的文件创建和删除功能
     */
    FolderB folderB = new FolderB();
    FolderDecorator folderDecoratorB = new FolderDecorator(folderB);
    folderDecoratorB.mkDir();
    folderDecoratorB.rmdir();
    /**
     * 好处:动态扩展类的功能,原始类无需做修改,只需增加一个装饰类即可实现
     * 坏处:相似类的对象创建的过多,比如,扩展的功能很少,你是会选择增加一个装饰类呢,还是在原有类中直接做修改呢?
     * 
     * 如果考虑到设计模式的开闭原则:即对扩展开放,对修改关闭,那么牺牲一点内存空间达到类功能的扩展也是很有必要的
     */
  }
}

2.文件夹接口 == 提供两个基础的文件夹操作方法

package com.zhaoshuangjian.mode08_装饰者模式.mode08;
/**
 * <p>文件夹接口 == 提供两个基础的文件夹操作方法</p>
 *
 * @Author zhaoshuangjian  2023-03-25 上午10:39
 */
public interface Folder {
  /**
   * 创建文件夹
   */
  void mkDir();
  /**
   * 删除文件夹
   */
  void rmdir();
}

3.文件夹A

package com.zhaoshuangjian.mode08_装饰者模式.mode08;
/**
 * <p>文件夹A</p>
 *
 * @Author zhaoshuangjian  2023-03-25 上午10:39
 */
public class FolderA implements Folder{
  @Override
  public void mkDir() {
    System.out.println("在Windows系统中创建文件夹A");
  }
  @Override
  public void rmdir() {
    System.out.println("在Windows系统中删除文件夹A");
  }
}

4.文件夹B

package com.zhaoshuangjian.mode08_装饰者模式.mode08;
/**
 * <p>文件夹B</p>
 *
 * @Author zhaoshuangjian  2023-03-25 上午10:39
 */
public class FolderB implements Folder{
  @Override
  public void mkDir() {
    System.out.println("在Linux系统中创建文件夹B");
  }
  @Override
  public void rmdir() {
    System.out.println("在Linux系统中删除文件夹B");
  }
}

5.文件夹装饰类


package com.zhaoshuangjian.mode08_装饰者模式.mode08;
/**
 * <p>文件夹装饰类</p>
 * <p>扩展文件夹创建和删除的类 == 在创建和删除前后进行相应的操作</p>
 *
 * @Author zhaoshuangjian  2023-03-25 上午10:39
 */
public class FolderDecorator implements Folder{
  private Folder folder;
  public FolderDecorator(Folder folder) {
    this.folder = folder;
  }
  @Override
  public void mkDir() {
    System.out.println("-- 检查下,文件夹名称是否含有非法字符 --");
    this.folder.mkDir();
    System.out.println("-- 创建过程结束,提示用户文件夹是否创建成功 -- ");
  }
  @Override
  public void rmdir() {
    System.out.println("-- 检查下,文件夹是否为空,空的话直接删除,非空的话,提示下用户是否依然删除 --");
    this.folder.rmdir();
    System.out.println("-- 删除过程结束,提示用户文件夹是否删除成功 --");
  }
  /**
   * @return the folder
   */
  public Folder getFolder() {
    return folder;
  }
  /**
   * @param folder the folder to set
   */
  public void setFolder(Folder folder) {
    this.folder = folder;
  }
}
相关文章
|
4月前
|
设计模式 缓存 安全
【设计模式】【结构型模式】装饰者模式(Decorator)
一、入门 什么是装饰者模式? 装饰者模式(Decorator Pattern)是 Java 中常用的结构型设计模式,它能在不修改原有对象结构的前提下,动态地为对象添加额外的职责。 为什么要装饰者模式?
82 8
|
12月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
6月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
8月前
|
设计模式 存储
「全网最细 + 实战源码案例」设计模式——装饰者模式
装饰者模式(Decorator Pattern)是一种结构型设计模式,通过“包装”现有对象来为其添加额外功能,而无需修改原有代码。它通过创建装饰类来扩展对象的功能,而非继承。该模式由抽象构件、具体构件、抽象装饰者和具体装饰者组成,允许在运行时动态组合功能。穿衣服的例子很好地解释了装饰者模式:你可以根据需要一层层添加衣物,如毛衣、夹克和雨衣,每件衣物都扩展了基本行为,但不是你的一部分,可以随时脱掉。 优点包括灵活性、避免子类爆炸和符合开闭原则;缺点是可能增加复杂性和难以理解。适用于希望在不修改代码的情况下为对象新增行为的场景,尤其当继承难以实现或不可行时。
130 15
|
9月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
105 2
|
10月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
|
10月前
|
设计模式 Java Kotlin
Kotlin - 改良设计模式 - 装饰者模式
Kotlin - 改良设计模式 - 装饰者模式
61 4
|
10月前
|
设计模式 Java Kotlin
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
Kotlin教程笔记(56) - 改良设计模式 - 装饰者模式
|
12月前
|
设计模式 算法 搜索推荐
PHP中的设计模式:提高代码可维护性的秘诀
在本文中,我们将探讨PHP设计模式的重要性以及它们如何帮助开发者编写出更加灵活、可维护的代码。我们将介绍几种常见的设计模式,包括单例模式、工厂模式和策略模式,并通过实际示例展示它们在PHP中的应用。最后,我们会讨论何时使用这些设计模式以及在实际项目开发中的最佳实践。
148 28
|
11月前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性和扩展性
【10月更文挑战第13天】 本文将探讨PHP中常见的设计模式及其在实际项目中的应用。通过对比传统编程方式,我们将展示设计模式如何有效地提高代码的可维护性和扩展性。无论是单例模式确保类的单一实例,还是观察者模式实现对象间的松耦合,每一种设计模式都为开发者提供了解决特定问题的最佳实践。阅读本文后,读者将能更好地理解和应用这些设计模式,从而提升PHP编程的效率和质量。