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

23种设计模式_MODE08装饰者模式_手写代码实现_第1张图片

1.装饰者模式测试

package com.zhaoshuangjian.mode08_装饰者模式;

import com.zhaoshuangjian.mode08_装饰者模式.mode08.FolderA;
import com.zhaoshuangjian.mode08_装饰者模式.mode08.FolderB;
import com.zhaoshuangjian.mode08_装饰者模式.mode08.FolderDecorator;

/**
 * 

装饰者模式测试

* * @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;

/**
 * 

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

* * @Author zhaoshuangjian 2023-03-25 上午10:39 */ public interface Folder { /** * 创建文件夹 */ void mkDir(); /** * 删除文件夹 */ void rmdir(); }

3.文件夹A

package com.zhaoshuangjian.mode08_装饰者模式.mode08;

/**
 * 

文件夹A

* * @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;

/**
 * 

文件夹B

* * @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;

/**
 * 

文件夹装饰类

*

扩展文件夹创建和删除的类 == 在创建和删除前后进行相应的操作

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

你可能感兴趣的:(三,设计模式,设计模式,java,linux)