暑假在家待了8天,回来就不出意外的开始了我新的代码生活,这个学期任务是文件管理和数据挖掘,据说挺有挑战的哦,不过我喜欢,有难度才能学到更多东西嘛.

回家后基本上没看什么书,就在回家的火车上看了几个设计模式以及设计模式沉思录的第二章,参照着书上的内容,稍微写了一点关于文件目录管理的代码,由于初学,就凭着这两本书动手写吧,自我感觉有点乱,以后再作调整吧.

package com.crazyj.Model;import java.util.List;public abstract class Node {private Node parent = null;private long size;private String name;public String getName() {return this.name;}public long getSize() {return size;}public void setSize(long size) {this.size = size;}public Node getParent() {return parent;}public void setParent(Node parent) {this.parent = parent;}public List<Node> getChild() {throw new UnsupportedOperationException("对象不支持此功能");}public abstract void printStruct(String preStr);public void addChild(Node child) {throw new UnsupportedOperationException("对象不支持此功能");}public void removeChild(Node child) {throw new UnsupportedOperationException("对象不支持此功能");}public Node getChild(int index) {throw new UnsupportedOperationException("对象不支持此功能");}public void Accept(Visitor v) {throw new UnsupportedOperationException("对象不支持此功能");}public static void destroy(Node node) {if (node.isWritable()) {//delete note;} else {System.err.println(node.getName() + " cannot be deleted.");}}protected boolean isWritable() {return false;}public void StreamOut() {}
}
package com.crazyj.Model;public class File extends Node{private String name = "";public String getName() {return name;}public File(String name) {this.name = name;}public void printStruct(String preStr) {System.out.println(preStr + "-" + this.getName());}public void Accept(Visitor v) {v.visit(this);}
}
package com.crazyj.Model;import java.util.ArrayList;
import java.util.List;public class Directory extends Node {private List<Node> childNode = null;private String name = "";public String getName() {return name;}public Directory(String name) {this.name = name;}public long getSize() {long total = 0;Node child;for (int i = 0; getChild(i) != null; ++i) {child = getChild(i);total += child.getSize();}return total;}public void addChild(Node child) {if (childNode == null) {childNode = new ArrayList<Node>();}childNode.add(child);child.setParent(this);}public void removeChild(Node child) {if(childNode != null) {int idx = childNode.indexOf(child);if(idx != -1) {for(Node n : child.getChild()) {n.setParent(this);childNode.add(n);}childNode.remove(idx);}}}public List<Node> getChild() {return childNode;}public Node getChild(int index) {if (childNode != null) {if(index >=0 && index < childNode.size()) {return childNode.get(index);}}return null;}public void printStruct(String preStr) {System.out.println(preStr + "+" + this.getName());if(this.childNode != null) {preStr += " ";for(Node n : childNode) {n.printStruct(preStr);}}}public void Accept(Visitor v) {v.visit(this);}
}
package com.crazyj.Tools;public class SubStr {public String SubPath(String path) {return path.substring(Head(path).length()+1);}public String Head(String path) {String[] names = path.split("/");return names[0];}}

上一个工具类,用于mkdir的路径的剪切

package com.crazyj.Model;import com.crazyj.Tools.SubStr;public class Client {SubStr ss = new SubStr();@SuppressWarnings("unused")public void mkdir(Directory current, String path) {String subPath = ss.SubPath(path);if (subPath.equals("")) {current.addChild(new Directory(path));} else {String name = ss.Head(path);Node node = Find(name, current);if (node != null) {Directory child =  (Directory) node;if(child != null) {mkdir(child, subPath);} else {System.err.println(child.getName() + " is not a directory.");}} else {System.err.println(name + " nonexistent.");}}}public Node Find(String name, Directory current) {for(Node child : current.getChild()) {if(name.equals(child.getName())) {return child;}}return null;}public void Ls(Node node) {SuffixPrinterVisitor spv = new SuffixPrinterVisitor();for(int i = 0; node.getChild(i) != null; ++i) {Node child = node.getChild(i);child.Accept(spv);System.out.println("");}}/*public void Cat (Node node) {Link l;if((File) node != null) {} else if ((Directory) node != null) {} else if (l == (Link) node) {Cat(l.getSubject());}}*/
}
package com.crazyj.Model;public class Link extends Node{private Node subject;public Node getSubject() {return subject;}public Node getChild(int n) {return subject.getChild(n);}@Overridepublic void printStruct(String preStr) {// TODO Auto-generated method stubSystem.out.println(preStr + "+" + this.getName());}public void Accept(Visitor v) {v.visit(this);}}
package com.crazyj.Model;public class Visitor {public void visit(File file) {}public void visit(Directory directory) {System.err.println("Can't cat a directory.");}public void visit(Link link) {link.getSubject().Accept(this);}}
package com.crazyj.Model;public class SuffixPrinterVisitor extends Visitor{public SuffixPrinterVisitor() {}public void visit(File file) {}public void visit(Directory directory) {System.out.println("/");}public void visit(Link link) {System.out.println("@");}
}

总体用到了composite,proxy,visitor,template method,由于现在只是先实现单用户环境,singleton和mediator还没有用上,渐渐完善渐渐学习吧,

由于streamIn和streamout两个方法暂时没有写,老师让我先看操作系统的文件管理和java的file类,这部分代码先这样吧,到时候再加上后续功能.如果有大神给我指点一二当然感激不尽.

设计模式沉思录读后感2相关推荐

  1. 设计模式沉思录读后感

    引言:前段时间参加一个大学生服务外包比赛,一个月类疯狂的碼代码亚,终于在完成一个小型的web项目,接下来听老师分配,要学习一下文件目录管理,给了我一本<设计模式沉思录>,让这几天先看一遍, ...

  2. 《设计模式沉思录》—第2章2.4节访问权限

    本节书摘来自异步社区<设计模式沉思录>一书中的第2章,第2.4节访问权限,作者[美]John Vlissides,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  3. 《设计模式沉思录》分享

    书籍信息 书名: 设计模式沉思录 原作名: Pattern Hatching: Design Patterns Applied 豆瓣评分: 8.6分(78人评价) 内容简介 本书作者是设计模式的开山鼻 ...

  4. 关于《设计模式》与《设计模式沉思录》中提到的“常露齿嘻笑的猫”(Cheshire Cat)的说明

    最近在看GoF的<设计模式>,在此之前看了John Vlissides的<设计模式沉思录>,在"沉思录"P42页脚注中,作者提到 "在C++中这样 ...

  5. 关于《设计模式》与《设计模式沉思录》中提到的“常露齿嘻笑的猫”(Cheshire Cat)的说明...

    最近在看GoF的<设计模式>,在此之前看了John Vlissides的<设计模式沉思录>,在"沉思录"P42页脚注中,作者提到 "在C++中这样 ...

  6. 【读书笔记】设计模式沉思录

    当我在china-pub上看到这本书的预售消息后就下订单了,不知道多少日子之后收到了china-pub的邮件.不过书到手后我好失望,怎么才140页~~~忽悠谁呢. 抱着浓缩的都是精华的心态,我看下去了 ...

  7. 设计模式沉思录:一 资源池

    文章首发链接:https://mp.weixin.qq.com/s/pUjm_u6xaoFreK_36qITcg 公众号:程序员架构进阶 一 摘要 在工作中,经常会看到或者用到池化技术,例如数据库连接 ...

  8. 设计模式沉思录 - 读书笔记(XMind)

    注:后面会不定期,以XMind的方式发布一些读书笔记. 目标:书还要是越读越薄才行!

  9. 设计模式调优-性能设计沉思录(10)

    JAVA调优系列文章 JVM调优全面探讨-性能设计沉思录(1)_luozhonghua2000的博客-CSDN博客 JVM GC回收和内存分配优化-性能设计沉思录(2)_luozhonghua2000 ...

最新文章

  1. NR 5G 身份标识
  2. nodejs-stream部分
  3. ad 卡尔曼_对Kalman(卡尔曼)滤波器的理解
  4. 第22件事 产品规划和运营规划
  5. android 带清除功能的输入框控件
  6. Python自定义时间间隔访问网页
  7. proc文件系统面面谈(转贴)
  8. python运维模块_Python 运维常用模块
  9. 【华为OJ】按单词将句子逆序
  10. TitleWindow的CloseButtionSkin问题
  11. 项目整理-支付宝的支付问题
  12. GBDT 特征提取(2)
  13. Python数学建模入门【1】
  14. [Mac]『Grid』(格子) 免费又实用的分屏软件
  15. ps界面为啥突然变大了_【新手必看】使用PS绘画需要学会哪些基本操作?
  16. 微型计算机偏移地址,请高手讲解一下在微机原理里面,偏移地址,段地址,实体地址之间的关系!配合图解更好,谢谢!...
  17. ViewPager翻页动画失效详解
  18. 求义隆单片机c语言红外解码程序,吐槽义隆单片机,顺便送上超轻红外解码程序....
  19. AD19设置元件属性
  20. 【转】iOS游戏/应用的营销及推广技巧(2)

热门文章

  1. 神武3手游哪个跨平台服务器最多人,神武3手游跨平台-羽扇纶巾开服时间表_神武3手游新区开服预告_第一手游网手游开服表...
  2. java 两个set是否相等,java - 两个Set包含相同的元素,但不相等。 为什么会这样呢? - 堆栈内存溢出...
  3. SpringBoot中Kafka的SSL链接
  4. SQL uniqueidentifier
  5. 阿里百万级QPS资源调度系统揭秘
  6. 鹅开口易得什么症状 什么药防治鹅开口病快
  7. 捕捉-鼠标悬停hover样式
  8. web前端面试题最全版总结
  9. tomcat访问webapps静态文件报404
  10. ny655 光棍的yy 大数处理