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; } }