设计模式沉思录读后感2
暑假在家待了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相关推荐
- 设计模式沉思录读后感
引言:前段时间参加一个大学生服务外包比赛,一个月类疯狂的碼代码亚,终于在完成一个小型的web项目,接下来听老师分配,要学习一下文件目录管理,给了我一本<设计模式沉思录>,让这几天先看一遍, ...
- 《设计模式沉思录》—第2章2.4节访问权限
本节书摘来自异步社区<设计模式沉思录>一书中的第2章,第2.4节访问权限,作者[美]John Vlissides,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...
- 《设计模式沉思录》分享
书籍信息 书名: 设计模式沉思录 原作名: Pattern Hatching: Design Patterns Applied 豆瓣评分: 8.6分(78人评价) 内容简介 本书作者是设计模式的开山鼻 ...
- 关于《设计模式》与《设计模式沉思录》中提到的“常露齿嘻笑的猫”(Cheshire Cat)的说明
最近在看GoF的<设计模式>,在此之前看了John Vlissides的<设计模式沉思录>,在"沉思录"P42页脚注中,作者提到 "在C++中这样 ...
- 关于《设计模式》与《设计模式沉思录》中提到的“常露齿嘻笑的猫”(Cheshire Cat)的说明...
最近在看GoF的<设计模式>,在此之前看了John Vlissides的<设计模式沉思录>,在"沉思录"P42页脚注中,作者提到 "在C++中这样 ...
- 【读书笔记】设计模式沉思录
当我在china-pub上看到这本书的预售消息后就下订单了,不知道多少日子之后收到了china-pub的邮件.不过书到手后我好失望,怎么才140页~~~忽悠谁呢. 抱着浓缩的都是精华的心态,我看下去了 ...
- 设计模式沉思录:一 资源池
文章首发链接:https://mp.weixin.qq.com/s/pUjm_u6xaoFreK_36qITcg 公众号:程序员架构进阶 一 摘要 在工作中,经常会看到或者用到池化技术,例如数据库连接 ...
- 设计模式沉思录 - 读书笔记(XMind)
注:后面会不定期,以XMind的方式发布一些读书笔记. 目标:书还要是越读越薄才行!
- 设计模式调优-性能设计沉思录(10)
JAVA调优系列文章 JVM调优全面探讨-性能设计沉思录(1)_luozhonghua2000的博客-CSDN博客 JVM GC回收和内存分配优化-性能设计沉思录(2)_luozhonghua2000 ...
最新文章
- NR 5G 身份标识
- nodejs-stream部分
- ad 卡尔曼_对Kalman(卡尔曼)滤波器的理解
- 第22件事 产品规划和运营规划
- android 带清除功能的输入框控件
- Python自定义时间间隔访问网页
- proc文件系统面面谈(转贴)
- python运维模块_Python 运维常用模块
- 【华为OJ】按单词将句子逆序
- TitleWindow的CloseButtionSkin问题
- 项目整理-支付宝的支付问题
- GBDT 特征提取(2)
- Python数学建模入门【1】
- [Mac]『Grid』(格子) 免费又实用的分屏软件
- ps界面为啥突然变大了_【新手必看】使用PS绘画需要学会哪些基本操作?
- 微型计算机偏移地址,请高手讲解一下在微机原理里面,偏移地址,段地址,实体地址之间的关系!配合图解更好,谢谢!...
- ViewPager翻页动画失效详解
- 求义隆单片机c语言红外解码程序,吐槽义隆单片机,顺便送上超轻红外解码程序....
- AD19设置元件属性
- 【转】iOS游戏/应用的营销及推广技巧(2)
热门文章
- 神武3手游哪个跨平台服务器最多人,神武3手游跨平台-羽扇纶巾开服时间表_神武3手游新区开服预告_第一手游网手游开服表...
- java 两个set是否相等,java - 两个Set包含相同的元素,但不相等。 为什么会这样呢? - 堆栈内存溢出...
- SpringBoot中Kafka的SSL链接
- SQL uniqueidentifier
- 阿里百万级QPS资源调度系统揭秘
- 鹅开口易得什么症状 什么药防治鹅开口病快
- 捕捉-鼠标悬停hover样式
- web前端面试题最全版总结
- tomcat访问webapps静态文件报404
- ny655 光棍的yy 大数处理