1 Star 1 Fork 1

MrMriacle/ts_design_mode

forked from 驯鹿者/ts_design_mode 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
composite.ts 2.35 KB
一键复制 编辑 原始数据 按行查看 历史
404_already_found 提交于 2019-11-26 15:26 +08:00 . update
// Node枚举
enum NodeTypeEnum {
Folder = "folder",
ImageFile = "image",
TextFile = "text"
}
// Node抽象类(Component)
abstract class AbstractNode {
protected name: string;
protected type: NodeTypeEnum;
protected children: AbstractNode[];
public abstract add(node: AbstractNode): AbstractNode;
public abstract getFileDeep(name: string): AbstractNode;
}
// 文件和文件夹基础类(Leaf)
class BasicFile extends AbstractNode {
public add(file: BasicFile): BasicFile {
console.error("文件类型不支持添加");
return this;
}
public getFileDeep(name: string): BasicFile {
if (name === this.name) {
return this;
}
return null;
}
}
class BasicFolder extends AbstractNode {
protected constructor() {
super();
this.type = NodeTypeEnum.Folder;
this.children = [];
}
public add(file: AbstractNode): BasicFolder {
this.children.push(file);
return this;
}
public getFileDeep(name: string): AbstractNode {
if (this.name === name) {
return this;
}
for (let index = 0; index < this.children.length; index++) {
const node = this.children[index].getFileDeep(name);
if (node) {
return node;
}
}
return null;
}
}
// 文件类
class ImageFile extends BasicFile {
constructor(name: string) {
super();
this.name = name;
this.type = NodeTypeEnum.ImageFile;
}
}
class TextFile extends BasicFile {
constructor(name: string) {
super();
this.name = name;
this.type = NodeTypeEnum.TextFile;
}
}
// 文件夹类
class SystemFolder extends BasicFolder {
constructor(name: string) {
super();
this.name = name;
}
}
// 客户端
class Client {
public static initTree(): SystemFolder {
const folder1: SystemFolder = new SystemFolder("根文件夹");
const folder2: SystemFolder = new SystemFolder("图像文件夹");
const folder3: SystemFolder = new SystemFolder("文本文件夹");
const image1: ImageFile = new ImageFile("a.jpg");
const image2: ImageFile = new ImageFile("b.jpg");
const text1: TextFile = new TextFile("a.txt");
const text2: TextFile = new TextFile("b.txt");
folder2.add(image1).add(image2);
folder3.add(text1).add(text2);
folder1.add(folder2).add(folder3);
return folder1;
}
}
const tree = Client.initTree();
const aJpg = tree.getFileDeep("a.jpg");
console.log(aJpg);
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/mrmriacle/ts_design_mode.git
git@gitee.com:mrmriacle/ts_design_mode.git
mrmriacle
ts_design_mode
ts_design_mode
master

搜索帮助